WPF 样式所有控件在一个实例中 UserControl
WPF Style All Controls in One Instance UserControl
是否可以说一个 UserControl 上面有几个控件,但是当重用 UserControl 时仅应用于所有这些控件的某些样式或模板?
例如 local:UserControl1 Grid.Column="1" 的控件应用了 style/template?
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<local:UserControl1 />
<local:UserControl1 Grid.Column="1" />
</Grid>
您不能根据带样式控件的某些条件有选择地应用样式而不实现相应的行为。不过,您可以使用样式触发器实现相同的目的。您可以在样式触发器中设置控件的模板,因此可以使用开箱即用的功能根据模板化控件的某些条件应用特定模板。在示例中有选择地设置背景:
<Grid>
<Grid.Resources>
<!-- Defining the TargetType but no x:Key will apply the style
to ALL children of this grid of the specified type -->
<Style TargetType="{x:Type local:UserControl1}">
<Style.Triggers>
<Trigger Property="Grid.Column" Value="1">
<!-- All setters here get applied only when
trigger condition is met -->
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<local:UserControl1 />
<local:UserControl1 Grid.Column="1" />
</Grid>
是否可以说一个 UserControl 上面有几个控件,但是当重用 UserControl 时仅应用于所有这些控件的某些样式或模板?
例如 local:UserControl1 Grid.Column="1" 的控件应用了 style/template?
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<local:UserControl1 />
<local:UserControl1 Grid.Column="1" />
</Grid>
您不能根据带样式控件的某些条件有选择地应用样式而不实现相应的行为。不过,您可以使用样式触发器实现相同的目的。您可以在样式触发器中设置控件的模板,因此可以使用开箱即用的功能根据模板化控件的某些条件应用特定模板。在示例中有选择地设置背景:
<Grid>
<Grid.Resources>
<!-- Defining the TargetType but no x:Key will apply the style
to ALL children of this grid of the specified type -->
<Style TargetType="{x:Type local:UserControl1}">
<Style.Triggers>
<Trigger Property="Grid.Column" Value="1">
<!-- All setters here get applied only when
trigger condition is met -->
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<local:UserControl1 />
<local:UserControl1 Grid.Column="1" />
</Grid>