gpt4 book ai didi

wpf - 从代码中获取 WPF 资源?

转载 作者:行者123 更新时间:2023-12-01 06:47:26 28 4
gpt4 key购买 nike

从代码中获取 WPF 资源的最简单方法是什么?

如果选中同一窗口中的复选框,我需要禁用 WPF 表单中的文本框。我已将复选框连接到代码隐藏中的事件处理程序。事件处理程序禁用复选框并将其背景更改为浅灰色,以指示控件已禁用:

private void OnCheckBoxChecked(object sender, RoutedEventArgs e)
{
MyTextBox.IsEnabled = false;
MyTextBox.Background = (Brush)FindResource("DisabledControlBackgroundBrush");
}

禁用的控件背景色被定义为导入 WPF 窗口的资源字典中的资源。我通过在 XAML 中设置文本框背景来测试资源,并且资源工作正常。

我也知道事件处理程序正在工作,因为它会在单击复选框时禁用文本框。

我的问题是事件处理程序没有像它应该的那样更改 Background 属性。我怀疑我对 FindResource 的调用有问题,但我没有收到异常,并且输出窗口上没有任何内容。

那么,如何从代码中获取此资源并将其应用于我的文本框?谢谢你的帮助。

最佳答案

大卫。我已经组合了一个示例窗口,它使用 TextBox.Style 上的触发器来执行此操作。 :

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<SolidColorBrush x:Key="IsCheckedColor" Color="DarkGray" />
</Window.Resources>
<StackPanel>
<TextBox x:Name="textbox" Margin="36" Height="24" >
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Background" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=checkbox}" Value="True" >
<Setter Property="Background" Value="{StaticResource IsCheckedColor}" />
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<CheckBox x:Name="checkbox" Content="Click Me" Height="24" Margin="36"/>
</StackPanel>
</Window>
您不能使用 Trigger更改另一个控件的属性,但您可以使用它们根据其他内容更改控件的属性,例如 DataContext或其他控件。
每个控件可以有一个 Triggers集合,但这只能包含 EventTriggers .在 Style您可以使用普通的 Trigger可以用来控制动画,还有 DataTrigger ,我在本示例中使用它来控制 TextBox设置基于 CheckBox 的属性.
请注意,我还使用了 SetterTriggers集合来设置默认值,我不需要第二个 SetterCheckBox没有被选中——它只是回到“默认”状态。
编辑 - 如何更改禁用的背景 TextBox我在 Blend 中执行此操作,但是如果您没有 Blend,您当然可以直接将 XAML 放入。这与控制状态有关。如 TextBox Normal之间的转换, MouseOver , 和 Disabled ,您可以对外观的更改进行动画处理。在这种情况下,我们使用几乎为零持续时间的动画,因此更改是即时的。
将以下内容添加到 StackPanel :
    <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="textbox" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<SplineColorKeyFrame KeyTime="00:00:00" Value="{StaticResource IsCheckedColor}"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

关于wpf - 从代码中获取 WPF 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3410969/

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