【问题标题】:(wpf) Application.Current.Resources vs FindResource(wpf) Application.Current.Resources 与 FindResource
【发布时间】:2013-07-17 16:11:40
【问题描述】:

所以,我正在用 C# 中的 WPF 制作一个 GUI。它看起来像这样:

现在还没有完成。这 2 行是我尝试制作一种数据表的尝试,它们在 XAML 中进行了硬编码。

现在,我正在 C# 中实现添加新水果按钮的功能。 我在 XAML 中有以下样式来控制行的背景图像应该是什么样子:

<Style x:Key="stretchImage" TargetType="{x:Type Image}">
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="Stretch" Value="Fill"/>
</Style>

所以,在代码中,我为每一列创建一个图像,col0col1col2,如果我使用以下代码,

col0.Style = (Style)Application.Current.Resources["stretchImage"];
col1.Style = (Style)Application.Current.Resources["stretchImage"];
col2.Style = (Style)Application.Current.Resources["stretchImage"];

它会添加一个如下所示的新行:

如您所见,这不太对... 并且拉伸窗口会加剧问题:

似乎不尊重样式的“Stretch”属性。

但是,如果我改为将样式加载代码更改为

col0.Style = (Style)FindResource("stretchImage");
col1.Style = (Style)FindResource("stretchImage");
col2.Style = (Style)FindResource("stretchImage");

效果很好:

(同样,应用程序还没有完成,所以不用担心),但我的主要问题是:Application.Current.Resources[]FindResource() 之间有什么区别?为什么一个似乎忽略了某些属性而另一个却没有?如果可能的话,我怎样才能让Application.Current.Resources[] 正常工作?

【问题讨论】:

  • 发布相关的 XAML。我在这里看到的只是一种风格。
  • 老兄,你所有的 XAML 都是错误的。让我修复它并回复你。

标签: c# wpf styles


【解决方案1】:

几乎可以在可视化树中的任何元素上定义资源。 FrameworkElement.FindResource() 将沿着树向上寻找每个节点的资源,并最终到达 Application。 Application.Current.Resources[] 跳过所有这些并直接获取应用程序上的资源。您几乎总是希望使用 FindResource(),以便可以在不同点覆盖样式。

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多