代码之家  ›  专栏  ›  技术社区  ›  cjibo

WPF DataTrigger未在ItemsControl之外触发

  •  1
  • cjibo  · 技术社区  · 16 年前

    我有一个自定义UserControl,它扩展了button控件并添加了两个新的依赖属性IsActive和Icon。在控件中,有DataTriggers根据值设置图标和活动状态。

    我遇到的问题是控件只在ItemControl内部工作。下面是Items控件内外的控件的XAML部分。当控件不在项控件中时,触发器不工作。

    <ItemsControl ItemsSource="{Binding HomeList}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Controls:FunctionButton IsActive="True" Foreground="White" Content="Home" Icon="Home" Command="{Binding HomeClick}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
    </ItemsControl>
    <Controls:FunctionButton IsActive="True" Foreground="White" Content="Home" Icon="Home" Command="{Binding HomeClick}" />
    

    这是控件中的DataTrigger。

     <DataTrigger Binding="{Binding ElementName=MyFunctionButton, Path=Icon}" Value="Home">
           <Setter TargetName="HomeIcon" Property="Visibility" Value="Visible" />
     </DataTrigger>
    

    唯一不起作用的属性是我的依赖项属性。

        public static readonly DependencyProperty IsActiveProperty = DependencyProperty.Register("IsActive", typeof(bool), typeof(FunctionButton));
     public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof (Icon), typeof (FunctionButton));
    
     /// <summary>
        /// Gets or sets a value indicating whether this instance is active.
        /// </summary>
        /// <value><c>true</c> if this instance is active; otherwise, <c>false</c>.</value>
     public bool IsActive
     {
         get
         {
             return (bool) base.GetValue(IsActiveProperty);
         }
            set
            {
                base.SetValue(IsActiveProperty, value);
            }
     }
    
        /// <summary>
        /// Gets or sets the icon.
        /// </summary>
        /// <value>The icon.</value>
     public Icon Icon
     {
         get
         {
             return (Icon) base.GetValue(IconProperty);
         }
            set
            {
                base.SetValue(IconProperty, value);
            }
     }    
    

    任何帮助都将不胜感激。

    1 回复  |  直到 15 年前
        1
  •  1
  •   John Bowen    16 年前

    从包含的XAML中不太清楚,因为您没有显示x:Name=“MyFunctionButton”在哪里声明或触发器在哪里使用,但我假设您遇到了名称范围问题。不要使用ElementName,而应该使用RelativeSource绑定(TemplatedParent或Self,具体取决于触发器所在的位置)或属性触发器而不是DataTrigger。如果您可以在DataTrigger周围包含更多的XAML来提供一些上下文,我可以用一些代码给您一个更精确的答案。

    推荐文章