我有一个从UserControl派生的自定义WPF控件.在我的XAML文件的参考资料部分中,我为将在自定义控件上显示的项目定义了几个模板和样式.
这是我的一种风格的定义,用于绘制向下箭头.
<Style x:Key="ArrowStyle" TargetType="Path">
<Setter Property="Margin" Value="4"/>
<Setter Property="Stretch" Value="Uniform"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Data" Value="M 0 0 L 5 5 L 10 0 Z"/>
<Setter Property="Fill" Value="{DynamicResource FormText}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
所以,我有一个从按钮派生的自定义按钮对象.基本上它是一个显示箭头的小方形按钮.在我的自定义按钮的构造函数中,我有以下代码.
Path Arrow = new Path();
Arrow.Style = TryFindResource("ArrowStyle") as Style;
Run Code Online (Sandbox Code Playgroud)
但是,对TryFindResource的调用失败表明它无法定位资源.如果我将定义的样式移动到App.xaml中,它会找到它,但不会在它是自定义控件资源时找到它.
我做错了什么或错过了什么?
更新
我调用TryFindResource的自定义按钮位于自定义用户控件上.但是,由于我在自定义按钮的构造函数中调用TryFindResource,因此在调用TryFindResource时它实际上不会驻留在自定义用户控件上.创建自定义按钮后,它将添加到自定义用户控件.也许有一种不同的方式或地方放置TryFindResource,以便在按钮属于控件后调用它.
TryFindResource向上遍历逻辑树到父元素,直到到达根元素.
然后检查应用程序资源.这是你在第二次尝试中放置的那个,并且因为它在那里被发现而起作用.
因此,当您说"TryFindResource("ArrowStyle")时,它会搜索其父元素上的箭头样式,直至其窗口资源,然后搜索应用程序资源(全局资源).当您从自定义按钮对象调用它时,它无法找到因为您的ArrowStyle资源不满足上述条件.
您需要在"从UserControl派生的自定义WPF控件"或其后代上调用它.
我认为如果你不能让它工作只需将其移动到应用程序资源或使用所有全局资源(样式)将资源字典添加到您的应用程序资源:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="....Your resources.xaml"/>
<ResourceDictionary Source="....Your resources.xaml"/>
<!-- Place further resources here -->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5966 次 |
| 最近记录: |