在代码隐藏中从 ResourceDictionary 访问 DataTemplate
Accessing DataTemplate from ResourceDictionary in code behind
我正在尝试将供应商提供的 VB 解决方案转换为 C#
。我需要将自定义 ResourceDictionary XAML
中的 DataTemplate 加载到 c#
class 中。我无法确定如何获取 DataTemplate。我能够创建一个 ResourceDictionary 并加载 XAML
但我被难住了。这是我的 XAML
[EditorResources].
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PropertyEditing="clr-namespace:Microsoft.Windows.Design.PropertyEditing;assembly=Microsoft.Windows.Design.Interaction"
xmlns:Local="clr-namespace:MyControls.Design"
xmlns:my="clr-namespace:MyControls;assembly=MyControls"
x:Class="EditorResources">
<DataTemplate x:Key="TagBrowserInlineEditorTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding StringValue}"/>
<PropertyEditing:EditModeSwitchButton Grid.Column="1"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="template">
<Border BorderThickness="2"
BorderBrush="Black">
<TextBlock Text="{Binding Path=value}" Padding="2" />
</Border>
</DataTemplate>
</ResourceDictionary>
这是我需要转换的 VB 代码:
Imports System
Imports System.ComponentModel
Imports System.Windows
Imports Microsoft.Windows.Design.Metadata
Imports Microsoft.Windows.Design.PropertyEditing
Imports Microsoft.Win32
Public Class TagBrowserDialogPropertyValueEditor
Inherits DialogPropertyValueEditor
Private res As New EditorResources()
Public Sub New()
Me.InlineEditorTemplate = TryCast(res("TagBrowserInlineEditorTemplate"), DataTemplate)
End Sub
Public Overloads Overrides Sub ShowDialog(ByVal propertyValue As PropertyValue, ByVal commandSource As IInputElement)
Dim frmBrowseTagParameter As New OPCWPFDashboard.Design.FormBrowseTagParameter
If frmBrowseTagParameter Is Nothing Then
frmBrowseTagParameter = New OPCWPFDashboard.Design.FormBrowseTagParameter
End If
If frmBrowseTagParameter.ShowDialog = Forms.DialogResult.OK Then
propertyValue.StringValue = frmBrowseTagParameter.Final_Tag
End If
End Sub
End Class
WPF 中的框架元素包含一个 FindResource
方法,该方法通过键在应用程序范围内搜索资源。
看看documentation。您可以通过 Key 获取 DataTemplate,然后在您的代码隐藏文件中访问它。
在这种情况下,这对您有帮助吗?如果没有,请说明您的问题。
据我了解,res
变量是 class 派生自 ResourceDictionary
的实例。在这种情况下,您可以很容易地获得数据模板:
this.InlineEditorTemplate = res["TagBrowserInlineEditorTemplate"] as DataTemplate;
另请参阅 following article 以获得更完整的示例。
我正在尝试将供应商提供的 VB 解决方案转换为 C#
。我需要将自定义 ResourceDictionary XAML
中的 DataTemplate 加载到 c#
class 中。我无法确定如何获取 DataTemplate。我能够创建一个 ResourceDictionary 并加载 XAML
但我被难住了。这是我的 XAML
[EditorResources].
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PropertyEditing="clr-namespace:Microsoft.Windows.Design.PropertyEditing;assembly=Microsoft.Windows.Design.Interaction"
xmlns:Local="clr-namespace:MyControls.Design"
xmlns:my="clr-namespace:MyControls;assembly=MyControls"
x:Class="EditorResources">
<DataTemplate x:Key="TagBrowserInlineEditorTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding StringValue}"/>
<PropertyEditing:EditModeSwitchButton Grid.Column="1"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="template">
<Border BorderThickness="2"
BorderBrush="Black">
<TextBlock Text="{Binding Path=value}" Padding="2" />
</Border>
</DataTemplate>
</ResourceDictionary>
这是我需要转换的 VB 代码:
Imports System
Imports System.ComponentModel
Imports System.Windows
Imports Microsoft.Windows.Design.Metadata
Imports Microsoft.Windows.Design.PropertyEditing
Imports Microsoft.Win32
Public Class TagBrowserDialogPropertyValueEditor
Inherits DialogPropertyValueEditor
Private res As New EditorResources()
Public Sub New()
Me.InlineEditorTemplate = TryCast(res("TagBrowserInlineEditorTemplate"), DataTemplate)
End Sub
Public Overloads Overrides Sub ShowDialog(ByVal propertyValue As PropertyValue, ByVal commandSource As IInputElement)
Dim frmBrowseTagParameter As New OPCWPFDashboard.Design.FormBrowseTagParameter
If frmBrowseTagParameter Is Nothing Then
frmBrowseTagParameter = New OPCWPFDashboard.Design.FormBrowseTagParameter
End If
If frmBrowseTagParameter.ShowDialog = Forms.DialogResult.OK Then
propertyValue.StringValue = frmBrowseTagParameter.Final_Tag
End If
End Sub
End Class
WPF 中的框架元素包含一个 FindResource
方法,该方法通过键在应用程序范围内搜索资源。
看看documentation。您可以通过 Key 获取 DataTemplate,然后在您的代码隐藏文件中访问它。
在这种情况下,这对您有帮助吗?如果没有,请说明您的问题。
据我了解,res
变量是 class 派生自 ResourceDictionary
的实例。在这种情况下,您可以很容易地获得数据模板:
this.InlineEditorTemplate = res["TagBrowserInlineEditorTemplate"] as DataTemplate;
另请参阅 following article 以获得更完整的示例。