gpt4 book ai didi

c# - Wpf:在后面的代码中设置 IsEnabled 会中断 Style Trigger

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:55 24 4
gpt4 key购买 nike

我在使用 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>

查看代码隐藏:

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

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;
}
}
}

View 模型:

(ViewModelBase 持有 INotifyPropertyChanged 接口(interface)的实现)

using System;

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

最佳答案

看看dependency property value precedence ,以及来自不同位置的变化值、样式、触发器、动画等如何协同工作。

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

关于c# - Wpf:在后面的代码中设置 IsEnabled 会中断 Style Trigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com