所以,我正在使用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(),因此您可以在各个点覆盖样式.