【问题标题】:Wpf: setting IsEnabled in code behind breaks Style TriggerWpf:在中断样式触发器的代码中设置 IsEnabled
【发布时间】:2011-09-30 12:01:03
【问题描述】:

我在使用 DataTrigger 操作控件的 IsEnabled 属性时遇到问题。通常它工作正常,但是当我在 View 的 Initialized 事件中初始化 IsEnabled 状态时,动态样式不再起作用。

这是我的代码。我将其精简为最简单的示例。

为什么会发生这种情况,我该怎么做才能让我通过样式触发器和在后面的代码中对其进行初始化来设置 IsEnabled?

提前致谢!

查看:

(包含一个文本框,应根据复选框的值启用/禁用)

<Window x:Class="IsEnabled.Views.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Initialized="Window_Initialized">
    <StackPanel Orientation="Vertical">
        <TextBox x:Name="txtTarget" Width="200">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=ToggleValue}" Value="True">
                            <Setter Property="IsEnabled" Value="False" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
        <CheckBox x:Name="chkSource" IsChecked="{Binding Path=ToggleValue}" />
    </StackPanel>
</Window>

查看代码隐藏:

(唯一的补充是Initialized事件的实现为IsEnabled设置初始状态)

using System;
using System.Windows;

namespace IsEnabled.Views
{
    public partial class MainView : Window
    {
        public MainView()
        {
            InitializeComponent();
        }

        private void Window_Initialized(object sender, EventArgs e)
        {
            txtTarget.IsEnabled = false;
        }
    }
}

视图模型:

(ViewModelBase 持有 INotifyPropertyChanged 接口的实现)

using System;

namespace IsEnabled.ViewModels
{
    class MainViewModel : ViewModelBase
    {
        private bool _ToggleValue;
        public bool ToggleValue
        {
            get { return _ToggleValue; }
            set
            {
                _ToggleValue = value;
                OnPropertyChanged(this, "ToggleValue");
            }
        }
    }
}

【问题讨论】:

    标签: c# wpf datatrigger isenabled


    【解决方案1】:

    查看dependency property value precedence,了解来自不同位置的更改值、样式、触发器、动画等如何协同工作。

    添加到您的 Binding Mode=TwoWay,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 2019-07-22
      • 2013-10-29
      • 2012-03-14
      • 2018-03-06
      • 2011-09-20
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多