2017-08-28 8 views
0

ベンダー提供のVBソリューションをC#に変換しようとしています。カスタムResourceDictionary XAMLからDataTemplateをc#クラスにロードする必要があります。私はDataTemplateを取得する方法を決定することはできません。私はResourceDictionaryを作成してXAMLをロードすることができますが、そこから困惑しています。ここに私のXAML [EditorResources]があります。ここでコード内のResourceDictionaryからDataTemplateにアクセス

<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のコードです:WPFで

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 

答えて

0

私が理解する限り、res変数はResourceDictionaryから派生したクラスのインスタンスです。この場合、あなたは非常に簡単にデータテンプレートを取得することができます。

this.InlineEditorTemplate = res["TagBrowserInlineEditorTemplate"] as DataTemplate; 

は、より完全な例のためにも following article参照してください。

+0

ありがとうございます。これはまさに私が探していたものです。 – Schrecengost

+0

あなたを助けてうれしい!答えを受け入れたものとしてマークしてください。 – Pavel

0

Aフレームワーク要素は、キーによるリソースのためのアプリケーションスコープを検索FindResource方法を、含まれています。

documentationをご覧ください。キーでDataTemplateを取得し、コードビハインドファイルでアクセスできます。

この場合、これがあなたに役立つでしょうか?そうでない場合は、質問を明記してください。

関連する問題