我有一个针对按钮控件的ControlTemplate。 ControlTemplate有两个正常和按下状态的图像,每个图像一个。我想在屏幕上的8个不同按钮中使用这个ControlTemplate,每个按钮前面都有不同的图像。
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates1">
<VisualState x:Name="Pressed1">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image1">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Normal1"/>
<VisualState x:Name="Disabled1"/>
<VisualState x:Name="MouseOver1"/>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates1">
<VisualState x:Name="Focused1"/>
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates"/>
<VisualStateGroup x:Name="FocusStates"/>
</VisualStateManager.VisualStateGroups>
<Image x:Name="image" Source="source1" />
<Image x:Name="image1" Source="source2" Visibility="Collapsed"/>
</Grid>
</ControlTemplate>
如何在模板中放置第三个图像,以便为每个按钮接收不同的来源?
这样的事情:
<Button Template="{StaticResource ButtonControlTemplate1}" thirdImage="source_to_third_image"/>
答案 0 :(得分:0)
根据我在您的问题中所理解的,您正在寻求实施attached properties。
由于按钮本身不携带三个独立图像源的属性(你可能会破解Content
属性,但这会很麻烦),你需要实现这些属性并简单地执行标准绑定模板。
答案 1 :(得分:0)
为什么不将Content属性用于第三张图片?
您的ControlTemplate将如下所示:
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
<Grid>
...
<ContentPresenter Content="{TemplateBinding Content}" />
<Image x:Name="image" Source="source1" />
<Image x:Name="image1" Source="source2" Visibility="Collapsed"/>
</Grid>
</ControlTemplate>
您的按钮声明将如下所示:
<Button>
<Image Source="source3" />
</Button>
然后你只需要添加一个相关的视觉状态。