【问题标题】:XAML DataTrigger bindingXAML 数据触发器绑定
【发布时间】:2016-04-15 12:54:39
【问题描述】:

我尝试使用这样的绑定来应用数据触发器

<Style x:Key="ItemStyle" TargetType="{x:Type TabItem}">
        <Setter Property="Width" Value="293"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                //...somes trigger...
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger  Binding="{Binding Path=isMaxOnglets}" Value="True">
                <Setter Property="Width" Value="100"/>
            </DataTrigger>
        </Style.Triggers>
</Style>

始终应用&lt;Setter Property="Width" Value="293"/&gt; 而不是dataTrigger, 我有这个

mainModel.isMaxOnglets = true;

还有这个

bool _isMaxOnglets;
    public bool isMaxOnglets
    {
        get
        {
            return _isMaxOnglets;
        }
        set
        {
            if (_isMaxOnglets != value)
                {
                    _isMaxOnglets = value;
                    RaisePropertyChanged("isMaxOnglets");
                }
            }
        }

问题:从未应用数据触发器

【问题讨论】:

    标签: c# wpf xaml triggers


    【解决方案1】:

    尝试使用Ancestor Binding

    <Style.Triggers>
            <DataTrigger  Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}}, Path=DataContext.isMaxOnglets}" Value="True">
                <Setter Property="Width" Value="100"/>
            </DataTrigger>
        </Style.Triggers>
    

    如果mainModelDataContextTabControl

    【讨论】:

    • 我喜欢 elementName 用于绑定到页面/窗口中的道具,因为它看起来更干净,但是无论哪种方式它看起来都像是定位道具时的错误
    • @Wobbles 我认为 elementName 在 XMAL 中提供了紧密耦合。我们应该尽可能避免这种情况。与 elementName 绑定相比,具有祖先绑定的样式将更具可重用性。
    • 哦,是的!谢谢你@Kylo Ren,这是我问题的解决方案......你拯救了我的一天!非常感谢你! :D
    • @JuseNNN 欢迎您。这是 WPF 程序员遇到的非常常见的问题之一。 :)
    猜你喜欢
    • 2018-02-02
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多