Jun*_*222 1 c# wpf xaml templatebinding
所以我有按钮及其样式:
\n<Style TargetType="Button" x:Key="BaseButtonStyle">\n <Setter Property="FontWeight" Value="Bold" />\n <Setter Property="Width" Value="120" />\n <Setter Property="Height" Value="30" />\n <Setter Property="BorderBrush" Value="#1FA3FF" />\n</Style>\n\n<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}"> \n <Setter Property="Background" Value="#1FA3EB" />\n <Setter Property="Foreground" Value="#FFFFFF" />\n</Style>\n\n<Button Style="{StaticResource MyButtonStyle}" Content="My text" />\n
Run Code Online (Sandbox Code Playgroud)\n它工作正常,我得到以下结果(海蓝宝石背景不是按钮的一部分,它属于窗口):
\n但后来我想替换按钮的内容并更改我的样式:
\n<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}"> \n <Setter Property="Background" Value="#1FA3EB" />\n <Setter Property="Foreground" Value="#FFFFFF" />\n\n <Setter Property="Template">\n <Setter.Value>\n <ControlTemplate>\n <StackPanel Orientation="Horizontal">\n <TextBlock Text="\xe2\x88\x9a" />\n <TextBlock Text="{TemplateBinding Button.Content}" />\n </StackPanel>\n </ControlTemplate>\n </Setter.Value>\n </Setter>\n</Style>\n
Run Code Online (Sandbox Code Playgroud)\n现在我的按钮变得很糟糕:
\n正如您所看到的,我的按钮失去了边框和背景,并且当鼠标悬停在其上时,它的视图也没有改变。我哪里错了,我应该做什么来防止它?
\nUPD
\n当我做这样的事情时:
\n<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle" BasedOn="{StaticResource BaseButtonStyle}"> \n <Setter Property="Background" Value="#1FA3EB" />\n <Setter Property="Foreground" Value="#FFFFFF" />\n <Setter Property="Content" >\n <Setter.Value>\n <StackPanel Orientation="Horizontal">\n <TextBlock Text="\xe2\x88\x9a" />\n <TextBlock Text="{TemplateBinding Button.Content}" />\n </StackPanel>\n </Setter.Value>\n </Setter>\n</Style>\n
Run Code Online (Sandbox Code Playgroud)\n然后我得到这个结果:
\n正如您所看到的,这与第一个结果类似,其中缺少复选标记
\n默认值的外观和功能在默认值Button
中定义(您可以在 MSDN 上的“按钮样式和模板”页面中找到)。当您更改 时,默认的外观和行为现在消失了,并替换为您的 plain和元素。ControlTemplate
Button
ControlTemplate
StackPanel
TextBlock
当提供新的ControlTemplate
控件时,最好从默认值开始ControlTemplate
并进行一些小的更改,直到获得所需的外观。这是对您的一个轻微的扩展Style
,提供了一些基本的鼠标悬停功能:
<Setter Property="Template">\n <Setter.Value>\n <ControlTemplate>\n <Border BorderBrush="Black" BorderThickness="1" CornerRadius="3">\n <Border.Style>\n <Style TargetType="{x:Type Border}">\n <Setter Property="Background" Value="LightBlue" />\n <Style.Triggers>\n <Trigger Property="IsMouseOver" Value="True">\n <Setter Property="Background" Value="LightGreen" />\n </Trigger>\n </Style.Triggers>\n </Style>\n </Border.Style>\n <StackPanel Orientation="Horizontal">\n <TextBlock Text="\xe2\x88\x9a" />\n <TextBlock Text="{TemplateBinding Button.Content}" />\n </StackPanel>\n </Border>\n </ControlTemplate>\n </Setter.Value>\n</Setter>\n
Run Code Online (Sandbox Code Playgroud)\n\n您可以从 MSDN 上的Class页面找到有关ControlTemplate
s的更多信息。ControlTemplate