我的xaml文件中有第三方库中的元素
<core:CheckBox />
它在该库中具有其风格
<Style x:Key="{x:Type controls:CheckBox}" TargetType="{x:Type controls:CheckBox}">
<Style.Setters>
<Setter Property="FrameworkElement.Width" Value="170" />
<Setter Property="FrameworkElement.Height" Value="60" />
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:CheckBox}">
<controls:Button x:Name="Button"
Width="{TemplateBinding FrameworkElement.Width}"
Height="{TemplateBinding FrameworkElement.Height}"
...
</ControlTemplate>
</Setter.Value>
</Setter>
...
</Style>
不幸的是,当设置了高度和宽度时,它不想伸展。
我无法修改第三方库中的样式。情境有其优点,因为如果他们改变了Style,我的元素将与系统的其余部分保持统一的外观。
我想使用Style,但不知何故删除了Height和Width setter。 有什么想法吗?
编辑: CheckBox位于Grid中,它不会填充单元格,这就是目标。
答案 0 :(得分:2)
您可以根据第三方默认样式创建自己的默认样式,并在那里重置属性。我找到了一种使用值转换器的方法:
public class DummyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
// return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
此转换器不执行任何操作,也不提供绑定值。
<local:DummyConverter x:Key="Resetter"/>
<Style TargetType="{x:Type controls:CheckBox}"
BasedOn="{StaticResource {x:Type controls:CheckBox}}">
<Setter Property="Height"
Value="{Binding RelativeSource={RelativeSource Self},
Converter={StaticResource Resetter}}"/>
<Setter Property="Width"
Value="{Binding RelativeSource={RelativeSource Self},
Converter={StaticResource Resetter}}"/>
</Style>
未有意设置宽度和高度
答案 1 :(得分:0)
答案在ASh的评论中
<Style x:Key="{x:Type controls:CheckBox}" TargetType="{x:Type controls:CheckBox}">
<Style.Setters>
<Setter Property="FrameworkElement.Width" Value="170" />
<Setter Property="FrameworkElement.Height" Value="60" />
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:CheckBox}">
<controls:Button x:Name="Button"
Width="{TemplateBinding FrameworkElement.Width}"
Height="{TemplateBinding FrameworkElement.Height}"
<!-- ADDED ALIGNMENT -->
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
...
</ControlTemplate>
</Setter.Value>
</Setter>
...
</Style>