我正在尝试创建一个样式,以确保ComboBoxes与TextBoxes具有相同的高度。
我希望通过重用默认TextBox样式的高度来实现这一点。
<Style TargetType="ComboBox">
<Setter Property="Height" Value="<Height from default TextBox style>" />
</Style>
我错过了一些明显的东西,或者这是不可能的?
答案 0 :(得分:1)
您可以使用BasedOn属性。
<Style x;Key="MyStyle" TargetType="Control">
<Setter Property="Height" Value="10" />
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource MyStyle}">
...
</Style>
<Style TargetType="ComboBox" BasedOn="{StaticResource MyStyle}">
...
</Style>
查看MSDN上的更多示例:http://msdn.microsoft.com/en-us/library/system.windows.style.basedon(v=vs.110).aspx
您可以创建默认TextBox和ComboBox样式所基于的样式。
答案 1 :(得分:1)
这是我能得到的尽可能接近:
Style defaultStyle = (Style)Application.Current.TryFindResource(typeof(TextBox));
object o = this.GetPropertyValue(defaultStyle, "Height");
GetPropertyValue
的位置:
private object GetPropertyValue(Style style, string propertyName)
{
foreach (Setter s in style.Setters)
{
if (s.Property.Name == propertyName)
{
return s.Value;
}
}
if (style.BasedOn != null)
{
return GetPropertyValue(style.BasedOn, propertyName);
}
return null;
}
这可行,但Style
使用Template
时会失败。你也可以走下去,但根据渲染,它会有另一个高度。
为了在XAML中使用它,你必须创建一个具有调用此方法的属性的静态类。