加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – (wpf)Application.Current.Resources vs FindResource

发布时间:2020-12-15 17:35:40 所属栏目:百科 来源:网络整理
导读:所以,我正在使用C#中的 WPF创建一个GUI.它看起来像这样: 它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的. 现在,我正在C#中实现添加新的水果按钮功能. 我在XAML中有以下样式来控制行的背景图像应该是什么样子: Style x:Key="stretc
所以,我正在使用C#中的 WPF创建一个GUI.它看起来像这样:

它现在还没有完成.这两行是我尝试制作一种数据表,它们在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>

因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,

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 []正常工作?

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读