Получение элемента управления из DataGridCell - PullRequest
7 голосов
/ 23 мая 2011

Предполагая, что у меня есть произвольный элемент управления внутри DataGridTemplateColumn, я хочу знать, как получить элемент управления, учитывая, что я получил DataGridCell, который содержит этот элемент управления.

Мой XAML-файл, содержащий DataGrid, имеет видследующим образом:

    <DataGrid Name="dgMovement">
...    
    <DataGridTemplateColumn Header="Target %">
       <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <vi:PercentageEditor Value="{Binding TargetPercentage, Mode=TwoWay,
                      UpdateSourceTrigger=PropertyChanged}" Width="100px"  
                      cal:Message.Attach="[Event PreviewLostKeyboardFocus] = [Action ChangeTargetPercentage];[Event PreviewGotKeyboardFocus] = [Action OnFocus]" 
                      Name="aa" />
          </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>...

Я извлек DataGridCell, используя методы расширения следующим образом:

DataGridCell cell = view.dgMovement2.GetCell(index, 6);

Методы расширения, содержащиеся в статическом классе, найдены здесь

Вопрос в том, как получить «PercentageEditor» после получения DataGridCell?Кто-нибудь может мне помочь?Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

12 голосов
/ 23 мая 2011

Вы можете использовать имя элемента управления, чтобы найти его в шаблоне, например,

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <uc:Bogus x:Name="root" ItemsSource="{Binding Machines}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
var cell = dataGrid.GetCell(5, 0);
var cp = (ContentPresenter)cell.Content;
var bogus = (Bogus)cp.ContentTemplate.FindName("root", cp);

Обратите внимание, однако, что обычно это , а не , необходимо какизменение шаблонных элементов управления по большей части может быть выполнено с использованием привязки данных, прикрепленных свойств и только событий.В общем, я бы ограничил доступ к шаблону через код для пользовательских элементов управления (которые часто имеют обозначенные части ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...