小弟有个问题,给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>

解决方案 »

  1.   

    两种方法吧:
    第一种肯定管用的方法就是为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>
      

  2.   

    第二种方法代码再贴一下: <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>
      

  3.   

    第一种方法的c#代码少加一句代码,两种方法都重贴一下:
    两种方法吧:
    第一种肯定管用的方法就是为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>
      

  4.   


    太感谢了,您说的第一种方法,我不能用啊,因为我需要直接来设置Label的Style,而不是等到MouseEnter或Leave了,
    第二种是要用MultiTrigger,我不太懂,您能帮我解释下么?
    <Condition Binding="{Binding}" Value="right" />拜托了
      

  5.   

    说一下想要什么效果?第一种方法是完全可以做到的。
    至于第二种方法:<Condition Binding="{Binding}" Value="right" />
    表示如果当前Binding给Label的数据等于字符串"right"的话,将使Label变大
      

  6.   


    需求是这样的:我从数据库返回一个List,把它绑定到Listbox上,listbox里的datatempalte是Label,这个Label要求鼠标滑过时要字体放大,并且高亮;而数据库返回的List中,如果其中一个属性Ischecked=true的数据,那么Label的字体就自动放大并且高亮,不论鼠标滑过与否。大概就是要求这样,我不想动态的生成Label,所以才用的listbox来Binding的,可是问题就来了,呵呵。
    麻烦您了
      

  7.   

    你的需求用我贴的第一种方法是能实现的,不过既然你的判断条件是一个bool类型的,用第二种方法就好了,
    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>
      

  8.   


    多谢了, 顺便问一下,<DataTrigger Binding="{Binding Path=IsChecked}" Value="true">
                                            <Setter Property="RenderTransform">
                                                <Setter.Value>
                                                    <ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
    这个可以加多条件么?
    比如要再加个条件呢?有些Label想把背景设置成 黑色的
      

  9.   

    放大以及黑色背景效果:<DataTrigger Binding="{Binding Path=IsChecked}" Value="true">
                                            <Setter Property="RenderTransform">
                                                <Setter.Value>
                                                    <ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
                                                </Setter.Value>                                 
                                            </Setter>
                                            <Setter Property="Background" Value="Black" />
                                        </DataTrigger>