gpt4 book ai didi

c# - 在代码隐藏中动态更改 XAML 样式,以便应用该样式的控件也反射(reflect)更改

转载 作者:太空狗 更新时间:2023-10-29 18:16:37 24 4
gpt4 key购买 nike

我希望能够从我的 WPF 窗口中的 .cs 文件设置样式属性(和值)。

我的问题是,如果我有 30 个矩形,我希望所有矩形都具有相同的样式(并且我不想单独更新所有矩形)。我希望将它们全部设置(在 xaml 文件中)为相同的样式,然后更新样式以符合我的要求。

假设我在 Xaml 中为每个矩形设置了 Style = "key1"。然后我希望能够稍后修改“key1”,以便所有矩形都反射(reflect)该更改。

我在 App.xaml 中尝试过

<Application.Resources>
<Style x:Key="key1" TargetType="Rectangle">
<Setter Property="Fill" Value="Red"/>
</Style>
</Application.Resources>

在 MainwWindows.xaml 中

<StackPanel>
<Rectangle Style="{StaticResource key1}" Height="200" Width="200" x:Name="rect1"/>
<Button Click="Button_Click" Content="Click"/>
</StackPanel>

在代码后面

private void Button_Click(object sender, RoutedEventArgs e)
{
Style style = Application.Current.Resources["key1"] as Style;
style.Setters.Add(new Setter(Rectangle.VisibilityProperty, Visibility.Collapsed));
}

这会更新样式但不会更新矩形。

这可能吗?有谁知道如何做到这一点? (一个例子将不胜感激)。

最佳答案

您需要使用 DynamicResource 以便它可以在运行时更改。您还需要用新样式替换样式,而不是尝试修改现有样式。这有效:

<StackPanel>
<Rectangle Style="{DynamicResource key1}" Height="200" Width="200" x:Name="rect1"/>
<Button Click="Button_Click" Content="Click"/>
</StackPanel>

Style style = new Style {TargetType = typeof(Rectangle)};
style.Setters.Add(new Setter(Shape.FillProperty, Brushes.Red));
style.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));

Application.Current.Resources["key1"] = style;

关于c# - 在代码隐藏中动态更改 XAML 样式,以便应用该样式的控件也反射(reflect)更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345166/

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