【发布时间】:2023-03-31 08:11:01
【问题描述】:
我有一个StackPanel,里面有一个UserControl:
<StackPanel>
<local:MyUC/>
</StackPanel>
UserControl 包含各种TextBoxes 和其他通过ResourceDictionary 设置样式的控件,以实现整个应用程序的共同外观。
对于TextBoxes,ResourceDictionary 条目如下所示:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="MaxWidth" Value="{Binding RelativeSource={RelativeSource AncestorType=Border},Path=ActualWidth}"/>
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
</Style>
现在我想将父控件(StackPanel)中的默认样式应用于UserControl 内的所有TextBoxes,这样我就可以绑定IsReadOnly-属性@987654334 @es 到仅在父模型中可用的属性:
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Model.State}" Value="ReadOnly">
<Setter Property="IsReadOnly" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<local:MyUC/>
</StackPanel>
不幸的是,在UserControl 的ResourceDictionary 内部定义的TargetType="{x:Type TextBox}" 的默认样式覆盖了我尝试在父StackPanel 中设置的样式。
我怎样才能扩展 StackPanel.Resources 中定义的默认样式,而不是覆盖它?
【问题讨论】:
标签: c# wpf xaml user-controls