c# – WPF样式中的继承反转
发布时间:2020-12-16 01:56:20 所属栏目:百科 来源:网络整理
导读:我有一个包含按钮的UserControl: Button Content="Button"/ 和风格: Style TargetType="Button" Setter Property="Background" Value="Blue"//Style 父窗口(或另一个UserControl)可以设置另一种更通用的样式: Style TargetType="Button" Setter Property=
我有一个包含按钮的UserControl:
<Button Content="Button"/> 和风格: <Style TargetType="Button"> <Setter Property="Background" Value="Blue"/> </Style> 父窗口(或另一个UserControl)可以设置另一种更通用的样式: <Style TargetType="Button"> <Setter Property="Background" Value="Red"/> </Style> 结果是(很明显)父按钮将具有更一般的样式(红色),而我的用户控件将具有更具体样式(蓝色)的按钮. 我想知道如何反转这种行为,以实现像我的自定义用户控件中设置默认样式,然后可以在父控件或窗口中覆盖,如果有必要? 关键是,默认样式首先在自定义用户控件中定义,并由其父级自动覆盖.这就是我称之为反转的方式. 解决方案的可能示例如下所示: <Style TargetType="Button" StylePriority="Default"> <Setter Property="Background" Value="Blue"/> </Style> StylePriority可以指示如果没有为该按钮定义其他样式,则应该应用默认样式. 解决方法
您可以使用动态资源.
一个UserControl: <UserControl x:Class="Example.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Example"> <UserControl.Resources> <Style TargetType="local:UserControl1"> <Style.Resources> <Style TargetType="Button" x:Key="UserControl1.DefaultButtonStyle"> <Setter Property="Background" Value="Red"/> </Style> </Style.Resources> </Style> </UserControl.Resources> <Button Content="UserControlButton" Style="{DynamicResource UserControl1.DefaultButtonStyle}"/> </UserControl> 还有一个窗口: <Window x:Class="Example.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Example"> <Window.Resources> <Style TargetType="Button"> <Setter Property="Background" Value="Blue" /> </Style> </Window.Resources> <StackPanel> <local:UserControl1 > <local:UserControl1.Resources> <Style x:Key="UserControl1.DefaultButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> <Setter Property="FontSize" Value="40" /> </Style> </local:UserControl1.Resources> </local:UserControl1> <Button Content="WindowButton" /> </StackPanel> </Window> 如果在窗口中删除控件的样式,则将应用默认的用户控件按钮样式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |