小弟有个问题,给ItemsControl绑定了数据给Label,同时Label的Content当鼠标划过时变大的效果,
但我想在绑定的过程中对于有些数据把 鼠标划过时变大的效果 去掉,该怎样做呢?就是相当于.net中一个Repeater有OnItemDataBinding事件一样,这种在WPF里怎样做呢?
<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但我想在绑定的过程中对于有些数据把 鼠标划过时变大的效果 去掉,该怎样做呢?就是相当于.net中一个Repeater有OnItemDataBinding事件一样,这种在WPF里怎样做呢?
<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
解决方案 »
- 在windows编程中怎么获得系统当前的日期?不包括准确的时间,就是想要日期?
- C# VS2005怎么为程序添加多个图标?
- C# textbox 控件 按回车 执行 按钮事件应该怎么写代码?
- Atom N280(270)上可以安装使用vs.net和sql吗
- Word、Excel文件解读!!!
- 怎么让程序安装到电脑上以后就开机自动运行!不需要任何设置!!
- C#短信猫开发,急
- 请教各位大哥:怎样把读入DataSet中的XML文件压缩后存入数据库的IMAGES字段然后再读出到DataSet中
- VS2005往Oracle数据库中插入数据失败。
- 高手进来看看 日期格式问题
- 程序退出了,进程还在。
- 请问怎么删除自己的资源
第一种肯定管用的方法就是为Label加事件xaml代码如下:
<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}" MouseEnter="lblMenu_MouseEnter" MouseLeave="lblMenu_MouseLeave">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<!--<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>-->
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C#代码如下
private void lblMenu_MouseEnter(object sender, MouseEventArgs e)
{
Label label = sender as Label;
if (label != null)
{
if (label.Content.ToString() == "right")//如果条件正确
{
ScaleTransform scale = new ScaleTransform(1.05, 1.05);
}
}
} private void lblMenu_MouseLeave(object sender, MouseEventArgs e)
{
Label label = sender as Label;
if (label != null)
{
ScaleTransform scale = new ScaleTransform(1, 1);
}
}第二种方法有条件限制的:如果Binding给Label的数据可枚举的话,可以用MutiTrigger来实现你想要的功能,xaml代码如下:
<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Binding="{Binding}" Value="right" />
</MultiTrigger.Conditions>
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Binding="{Binding}" Value="right" />
</MultiTrigger.Conditions>
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
两种方法吧:
第一种肯定管用的方法就是为Label加事件xaml代码如下:
<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}" MouseEnter="lblMenu_MouseEnter" MouseLeave="lblMenu_MouseLeave">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<!--<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>-->
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C#代码如下
private void lblMenu_MouseEnter(object sender, MouseEventArgs e)
{
Label label = sender as Label;
if (label != null)
{
if (label.Content.ToString() == "right")//如果条件正确
{
ScaleTransform scale = new ScaleTransform(1.05, 1.05);
label.RenderTransform = scale;
}
}
} private void lblMenu_MouseLeave(object sender, MouseEventArgs e)
{
Label label = sender as Label;
if (label != null)
{
ScaleTransform scale = new ScaleTransform(1, 1);
label.RenderTransform = scale;
}
}第二种方法有条件限制的:如果Binding给Label的数据可枚举的话,可以用MutiTrigger来实现你想要的功能,xaml代码如下:<ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Binding="{Binding}" Value="right" />
</MultiTrigger.Conditions>
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
太感谢了,您说的第一种方法,我不能用啊,因为我需要直接来设置Label的Style,而不是等到MouseEnter或Leave了,
第二种是要用MultiTrigger,我不太懂,您能帮我解释下么?
<Condition Binding="{Binding}" Value="right" />拜托了
至于第二种方法:<Condition Binding="{Binding}" Value="right" />
表示如果当前Binding给Label的数据等于字符串"right"的话,将使Label变大
需求是这样的:我从数据库返回一个List,把它绑定到Listbox上,listbox里的datatempalte是Label,这个Label要求鼠标滑过时要字体放大,并且高亮;而数据库返回的List中,如果其中一个属性Ischecked=true的数据,那么Label的字体就自动放大并且高亮,不论鼠标滑过与否。大概就是要求这样,我不想动态的生成Label,所以才用的listbox来Binding的,可是问题就来了,呵呵。
麻烦您了
xaml代码如下: <ItemsControl x:Name="icMenus">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Name="lblMenu" Content="{Binding Path=name}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Setters>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</Trigger>
<DataTrigger Binding="{Binding Path=IsChecked}" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
多谢了, 顺便问一下,<DataTrigger Binding="{Binding Path=IsChecked}" Value="true">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
</DataTrigger>
这个可以加多条件么?
比如要再加个条件呢?有些Label想把背景设置成 黑色的
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="Black" />
</DataTrigger>