我有一个相当复杂的应用程序,我有一个简单的附加行为,我想在我的所有TextBox上设置。
当我直接在元素上设置时,附加行为正常工作:
<TextBox
Text="{KtWpf:OrdinaryBinding Path=contact}"
utilityClasses:TextBoxBehavior.SelectAllTextOnFocus="True"
/>
当我在包含TextBox的元素的资源中通过未命名的样式设置它时,它工作正常:
<Grid>
<Grid.Resources>
<Style TargetType="TextBox">
<Setter
Property="utilityClasses:TextBoxBehavior.SelectAllTextOnFocus"
Value="True" />
</Style>
</Grid.Resources>
[...]
但是如果我在更高级别的资源中通过未命名的样式应用它,它就不适用于在较低级别资源中具有未命名样式的元素:
<KtWpf:KorUserControl>
<KtWpf:KorUserControl.Resources>
<Style TargetType="TextBox">
<Setter
Property="utilityClasses:TextBoxBehavior.SelectAllTextOnFocus"
Value="True" />
</Style>
<Grid>
<Grid.Resources>
<Style TargetType="TextBox">
<Setter Property="Width" Value="200" />
</Style>
</Grid.Resources>
[...]
<TextBox
Text="{KtWpf:OrdinaryBinding Path=contact}"
/>
我期待两种行为中的一种:
从我在测试中发现的,WPF正在做第二个。在这种情况下,我想要的是第一个。
如何在全局应用的样式中定义设置,即使TargetType上有未命名的样式在较低级别定义?
答案 0 :(得分:0)
我认为你做不到。较低级别的通用样式将始终覆盖较高级别的通用样式。我不认为有“多种风格”元素。
但是,您可以命名更高级别的样式(使其成为非泛型样式),并在较低级别的通用样式中使用BasedOn =“{StaticResource baseStyle}”。
只是我的意见obv。