2017-08-01 4 views
0

I持っインジケータ行のためにいくつかのテンプレートを設定し、派生DevExpress社のグリッドコントロール:アクセステンプレートのプロパティ

<dxg:GridControl.Resources> 
    <sys:Double x:Key="{dxgt:TableViewThemeKey ResourceKey=IndicatorWidth, ThemeName=Office2016White}">300</sys:Double> 

    <DataTemplate x:Key="{dxgt:RowIndicatorThemeKey ResourceKey=RowTemplate, ThemeName=Office2016White}"> 
     <Grid Name="IndicatorGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="35" Name="IndicatorColumnRowNumber" SharedSizeGroup="RowNumberGroup" /> 
      <ColumnDefinition Width="200" Name="IndicatorColumnDescription" SharedSizeGroup="DescriptionGroup" /> 
      <ColumnDefinition Width="200" Name="IndicatorColumnSource" SharedSizeGroup="SourceGroup" /> 
     </Grid.ColumnDefinitions> 
     //... 
    </DataTemplate> 
</dxg:GridControl.Resources> 

は今インジケータ列の幅は、今私が欲しい300に固定されています。行の幅は第2部分に定義された列によって計算される。私は、同様の背後にあるコードを介して、ビューの表示幅にアクセスすることができます知っているが、私は、彼らがXAMLでリソースに住んでいるので

var view = ((TableView)this.View); 
view.IndicatorWidth = IndicatorColumnRowNumber.Width /* can not be found */ + ... 

の背後にあるコードでテンプレートコントロールにアクセスすることはできませんよ。私はこれも起こるはずではないことを理解しています。これを実装する最良の方法は何ですか?おそらくコードの定義の中に抽出を抽出するでしょうか?

編集:ここでは は、テーブルの絵は、私はあなたが達成しようとしているものを100%わからないが、あなたはあなたの後ろにコード内であなたのリソースにアクセスしたい場合はでき

table

答えて

0

ですこのようにそれについて移動:

XAML:

<Grid x:Name="MyGrid"> 
    <Grid.Resources> 
     <DataTemplate x:Key="MyResource"> 
      <TextBlock Text="Hello"></TextBlock> 
     </DataTemplate> 
    </Grid.Resources> 
</Grid> 

コッドe後ろ:

public MainWindow() 
    { 
     InitializeComponent(); 

     var resource = MyGrid.Resources["MyResource"]; 
     var dataTemplate = (DataTemplate) resource; 
    } 

定義済みのリソースを取得するための追加ツールがあります。 FrameworkElement.FindResourceとFrameworkElement.TryFindResourceのメソッドは、指定した要素から、メインアプリケーションとセットアップしたテーマを含むまでビジュアルツリーの上からリソースを検索します。 MS基準から:

FrameworkElement.FindResource documentation

またリソース辞書とにfindResourceメソッドは、オブジェクトキー(ない文字列)を受け入れることに気づきます。これは、キーがRowIndicatorThemeKeyオブジェクトであるため、ケースに合っています。このようなオブジェクトをインスタンス化し、ResourceKeyプロパティを "RowTemplate"値に設定し、そのようなリソースを検索することができます。など、あなたのような問題のための一般的な解決策に

はあなたには、いくつかのより多くの情報を提供する場合、おそらく我々は、バインディングに基づいた解決策を見つけることができます、しかし背後にあるコードを必要とせずに実現することができます。

+0

ありがとうございます。私はXAMLでそれをしたいと思います。私はそれを言い換えようとしています:合計インジケータ列は、最初のリソースエントリに設定されています。私はそれがすべての列(現在435ですが、それを "auto"に設定したい)と同じにします。 – derape

+0

エレメント "IndicatorGrid"とそのActualWidthプロパティーにバインドできます: '{Binding Path = ActualWidth、ElementName = IndicatorGrid} ' – avamir10

+0

しかし、私はそれを逆にしたい:グリッドは必要なサイズを定義し、インジケータの幅をそれに応じて採用する必要があります – derape

関連する問題