10

いくつかの列が定義されたデータグリッドと、行の詳細テンプレートがあります。コードビハインド内の行詳細テンプレートのコントロールにアクセスするにはどうすればよいですか?プログラムで有効/無効にしたいボタンがありますが、コードビハインドでそのボタンにアクセスする方法がわかりません。私はMSDNでこれを見ました:

http://msdn.microsoft.com/en-us/library/bb613579.aspx

しかし、それは通常のデータテンプレートを説明しているだけなので、試してみたところ、機能しませんでした。私の場合は、行詳細データテンプレートです。確かに、誰かがこれについてコメントできるデータグリッド行詳細テンプレート内のコントロールにアクセスするためのコードを書いています(非常にありがたいです)。

4

3 に答える 3

9

さて、私は元の質問のMSDNの記事に投稿されているコードを微調整しなければならなかったこれを機能させる方法を見つけました....

DataGridRow row = (DataGridRow)(KeywordsGrid.ItemContainerGenerator.ContainerFromItem(KeywordsGrid.SelectedItem));

// Getting the ContentPresenter of the row details
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);

// Finding Remove button from the DataTemplate that is set on that ContentPresenter
DataTemplate template = presenter.ContentTemplate;
Button button = (Button)template.FindName("RemoveItemButton", presenter);

KeywordsGridmy に関連付けられた変数ですDataGrid。への呼び出しでFindVisualChild、私は aDataGridDetailsPresenterの代わりにクラスを使用していることに注意してくださいContentPresenter(これが鍵でした...FindVisualChild行の詳細の 1 つに到達するまで、メソッドはすべてのコンテンツ プレゼンターを反復処理する必要がありました)。

于 2010-08-10T21:28:13.143 に答える
2

DataGrid.LoadingRowDetails イベントを使用してください。それははるかに簡単です。

私はここでこれを見つけました: 各 DataGrid 行の詳細の行の詳細の DataTemplate にある TextBlock のテキストを変更する方法?

例:

xaml

<DataGrid.RowDetailsTemplate>
     <DataTemplate>
         <TextBlock x:Name="Test">Test</TextBlock>
         </DataTemplate>
</DataGrid.RowDetailsTemplate>

c#

private void dgVehicles_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
    TextBlock tbTest = e.DetailsElement.FindName("Test") as TextBlock;
    if (tbTest != null)
    {
        tbTest.Text = "Juhuu";
    }
}
于 2012-08-03T13:59:16.807 に答える
1

ボタンの有効な状態を表す、グリッドに表示されるオブジェクトのタイプのプロパティを定義できますか (または既に存在しますか)。はいの場合、行の詳細テンプレートを変更して、ボタンの IsEnabled プロパティをそのプロパティにバインドする方がはるかに簡単です。

于 2010-08-10T20:41:28.217 に答える