gpt4 book ai didi

.net - 是否可以在 XAML 中设置有选择地影响控件的样式?

转载 作者:行者123 更新时间:2023-12-02 07:18:51 25 4
gpt4 key购买 nike

<Window.Resources>我定义了以下样式:

    <Style x:Key="textBlockStyle" TargetType="TextBlock">
<Setter Property="Margin" Value="5,0,5,0"/>
</Style>

我定义了一些网格,其中有四个 TextBlocks :

    <WrapPanel>
<TextBlock Style="{StaticResource textBlockStyle}">Server</TextBlock>
<TextBlock Style="{StaticResource textBlockStyle}">IP</TextBlock>
<TextBlock Style="{StaticResource textBlockStyle}">Port</TextBlock>
<TextBlock Style="{StaticResource textBlockStyle}">Status</TextBlock>
</WrapPanel>

问题:我需要引用 textBlockStyle四次。

问题:是否可以在 WrapPanel 中仅设置该样式一次或者在其他地方不重复引用样式?

也许是这样的:

    <WrapPanel Style="{StaticResource textBlockStyle}">
<TextBlock>Server</TextBlock>
<TextBlock>IP</TextBlock>
<TextBlock>Port</TextBlock>
<TextBlock>Status</TextBlock>
</WrapPanel>

我不是在寻找全局解决方案!我可以删除该 x:Key="textBlockStyle"属性,但这会影响全部 TextBlocks在窗口中。我需要一种更具选择性的机制,但又不需要那种丑陋的代码重复。

最佳答案

您有多个选项,此处按照它们的扩展程度排列。

选项 1:在较低级别定义不带键的样式

您可以将资源粘贴在 WrapPanel 级别,以便它只影响 WrapPanel 内的控件:

<WrapPanel>
<WrapPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="5,0,5,0"/>
</Style>
</WrapPanel.Resources>

<!-- TextBlocks here -->
</WrapPanel>

注意缺少 key 。此Style将应用于WrapPanel内的所有TextBlock

选项 2:使用键定义样式,然后在较低级别再次定义样式

如果您使用键在较高级别定义 Style,则可以在不使用键的情况下在较低级别定义另一个 Style,并以该 为基础较高级别上的样式:

<Window>
<Window.Resources>
<Style TargetType="TextBlock" x:Key="textBlockStyle">
<Setter Property="Margin" Value="5,0,5,0"/>
</Style>
</Window.Resources>

<WrapPanel>
<WrapPanel.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource textBlockStyle"/>
</WrapPanel.Resources>

<!-- TextBlocks here -->
</WrapPanel>
</Window>

这会导致 Style 自动应用于 WrapPanel 内部的 TextBlock,但不会应用于外部。另外,您不必复制 Style 的详细信息 - 它们存储在更高级别。

选项 3:将样式放入 ResourceDictionary 中并有选择地合并它

最后,您可以将 Style 放置在单独的 ResourceDictionary 中,并有选择地将该字典合并到控件的 Resources 集合中:

<!-- TextBlockStyles.xaml -->
<ResourceDictionary>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="5,0,5,0"/>
</Style>
</ResourceDictionary>

<!-- Window.xaml -->
<Window>
<WrapPanel>
<WrapPanel.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TextBlockStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</WrapPanel.Resources>
</WrapPanel>
</Window>

<!-- Alternative Window.xaml if you have only one RD to merge in -->
<Window>
<WrapPanel>
<WrapPanel.Resources>
<ResourceDictionary Source="TextBlockStyles.xaml"/>
</WrapPanel.Resources>
</WrapPanel>
</Window>

现在,您可以在单独的字典中定义任意数量的样式集,然后有选择地将它们应用到元素树中。

关于.net - 是否可以在 XAML 中设置有选择地影响控件的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694798/

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