我有带依赖属性的TemplatedControl:
public static readonly DependencyProperty ColorProperty = DependencyProperty.Register(
"Color", typeof(SolidColorBrush), typeof(MenuButton), new PropertyMetadata(default(SolidColorBrush)));
public SolidColorBrush Color
{
get { return (SolidColorBrush)GetValue(ColorProperty); }
set { SetValue(ColorProperty, value); }
}
在我希望使用此属性设置背景的样式中。我试过了:
<Style TargetType="controls:MenuButton" x:Name="MenuButtonSimple">
<Setter Property="Background" Value="{Binding Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
和
<Style TargetType="controls:MenuButton" x:Name="MenuButtonSimple">
<Setter Property="Background" Value="{TemplateBinding Color}"/>
但它没有用。
如果我在模板中设置固定颜色 - 它可以工作:
<Style TargetType="controls:MenuButton" x:Name="MenuButtonSimple">
<Setter Property="Background" Value="667788"/>
如何在样式中使用依赖属性(Color)?
答案 0 :(得分:1)
我创建了一个名为MenuButton.cs的CustomControl:
在Generic.xaml中我有:
<Style TargetType="{x:Type local:MenuButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MenuButton}">
<Border Background="{TemplateBinding Color}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当你看到TemplateBinding Color时,没有像用户控件那样复杂,然后:
public class MenuButton : Control
{
public static readonly DependencyProperty ColorProperty = DependencyProperty.Register(
"Color", typeof(SolidColorBrush), typeof(MenuButton), new PropertyMetadata(new SolidColorBrush(Colors.Red)));
public SolidColorBrush Color
{
get { return (SolidColorBrush)GetValue(ColorProperty); }
set { SetValue(ColorProperty, value); }
}
static MenuButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MenuButton), new FrameworkPropertyMetadata(typeof(MenuButton)));
}
}
我把刷子换成红色只是为了测试,注意我为WPF做的。
如果您在模板外需要它,则可以:
<Style TargetType="{x:Type local:MenuButton}">
<Setter Property="Background" Value="{Binding Color, RelativeSource={RelativeSource Self}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MenuButton}">
<Grid Background="{TemplateBinding Background}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
确实我添加了
<Setter Property="Color" Value="Orange"/>
并且将背景改变为魅力。