我有两个指向同一TargetType的Style,x:Key分别是A和B。现在有一个TargetType的控件,我想让它在平常态时Style为A,满足某个DataTrigger的条件时Style为B,该如何实现?
解决方案 »
- 关于打印的bug!!!!!!!!!!!!!!!!
- 关于MEDIAPLAYER的开发
- 截取字符串中的第一段字符(以回车为结尾)
- 请问将图片转换成字符串如何实现?
- 求助:我想从事手机软件开发,手机游戏开发,不知道学。NET 好还是JAVA 好?
- 怎样才能将.net环境完全包在安装包中?
- 我现两个程序在用一个同一个txt文件,如何在第二个应个程序中判断,如果第一个程序是在用则这个等待!
- C#控制Word打开文档后,如何设置文档不可编辑?
- 跪求。。。寻找c#视频编码和解码器源代码-----满分送出----高手请进--在线等待!
- c#和pb比较开发一个大型的医院管理软件,有啥优缺点.一定给分
- 从数据库查询pdf问题
- 请教C#画图问题:画图时发生GDI+一般性错误
如下:<Label >
<Label.Template>
<ControlTemplate>
<Label Name="TestLB"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="TestLB" Property="Style" Value="{StaticResource NumLabel}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Label.Template>
</Label>
谢谢。有一个问题,我用的是DataTrigger,在Template用ElementName获取不到模板外部的控件。请问如何解决?
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Rectangle Width="50" Height="50" Fill="Red" x:Name="rectRed" Visibility="Visible" />
<Rectangle Width="50" Height="50" Fill="Blue" x:Name="rectBlue" Visibility="Collapsed" />
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Width="50" Height="50" Content="Red" x:Name="btnRed" />
<!-- 我想让这个按钮在rectRed的Visibility为Visible时用ActiveStyle,否则用NormanStyle -->
<Button Width="50" Height="50" Content="Red" x:Name="btnBlue" />
<!-- 我想让这个按钮在rectBlue的Visibility为Visible时用ActiveStyle,否则用NormanStyle -->
</StackPanel>
</Grid>
<Window.Resources>
<Style TargetType="Button" x:Key="NormanStyle">
<Setter Property="Background" Value="Gray" />
</Style>
<Style TargetType="Button" x:Key="ActiveStyle">
<Setter Property="Background" Value="Yellow" />
</Style>
</Window.Resources>
]
<Window.Resources>
<Style TargetType="Button" x:Key="NormanStyle">
<Setter Property="Background" Value="Gray" />
</Style>
<Style TargetType="Button" x:Key="ActiveStyle">
<Setter Property="Background" Value="Yellow" />
</Style>
</Window.Resources>
<Grid>
<Label>
<Label.Template>
<ControlTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Rectangle Width="50" Height="50" Fill="Red" x:Name="rectRed" Visibility="Visible" />
<Rectangle Width="50" Height="50" Fill="Blue" x:Name="rectBlue" Visibility="Collapsed" />
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Width="50" Height="50" Content="Red" x:Name="btnRed" Style="{StaticResource NormanStyle}"/>
<!-- 我想让这个按钮在rectRed的Visibility为Visible时用ActiveStyle,否则用NormanStyle -->
<Button Width="50" Height="50" Content="Red" x:Name="btnBlue" Style="{StaticResource NormanStyle}"/>
<!-- 我想让这个按钮在rectBlue的Visibility为Visible时用ActiveStyle,否则用NormanStyle -->
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=rectRed,Path=Visibility}" Value="Visible">
<Setter Property="Style" TargetName="btnRed" Value="{StaticResource ActiveStyle}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=rectBlue,Path=Visibility}" Value="Visible">
<Setter Property="Style" TargetName="btnBlue" Value="{StaticResource ActiveStyle}"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Label.Template>
</Label>
</Grid>
后台想得到控件也是可以的,用GetTemplateChild()方法就是。
.........
</DataTrigger>
大概是这个意思: <Style >
<Style.Triggers>
<DataTrigger A>
<Setter Property ="Template">
<Setter.Value>
<ControlTemplate />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger B>
<Setter Property ="Template">
<Setter.Value>
<ControlTemplate />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style >