我有2个按钮,两个按钮都使用样式来保持一致的UI。但是对于1个按钮,我想提供一个图像,而另一个只是文本。
我想我可以创建一个新的样式,复制一切,然后根据自己的喜好重新格式化,但这看起来很浪费,很耗时,我想我必须为每个我希望拥有的实例做这件事按钮上的图像。我的意思是,这很好,但我只是想知道是否有一种替代方案可以让事情变得更优雅。
我认为我应该以某种方式推动“争论”。或者样式的数据,无论是在XAML中还是在XAML中以格式化样式,或者是可以实现此目的的东西(我确定术语是错误的)。
这是按钮样式:
<Style x:Key="Control_Button" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image> <!-- Optional Image here --> </Image>
<TextBlock Name="btn" Text="{TemplateBinding Content}" Padding="16" VerticalAlignment="Center">
<TextBlock.TextDecorations>
<TextDecoration Location="Underline" />
</TextBlock.TextDecorations>
</TextBlock>
<!-- FIX ME: not underlined normally -->
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="TextBlock.IsMouseOver" Value="True">
<Setter TargetName="btn" Property="TextDecorations" Value="none" />
<!-- FIX ME: underlined on hover -->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:0)
如果不创建自定义控件或用户控件,则无法满足您的要求。
你应该做的是按照你喜欢的方式设置按钮的内容。如果您只想要一个字符串,可以直接设置它:
<Button>my text</Button>
或绑定:
<Button Content={Binding textProperty} />
要在按钮中添加图片,请将面板添加为内容,在此示例中我添加了StackPanel
,但您也可以使用Grid
或任何其他元素:
<Button>
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding myImagePath}" />
<TextBlock Text="{Binding myText}" />
</StackPanel>
</Button.Content>
</Button>