Вывод (расширение) шаблона элемента управления в WPF - PullRequest
1 голос
/ 14 марта 2012

У меня есть эта DataGrid. Я хочу изменить поведение Disabled (xaml); Я хочу изменить эту маленькую часть в шаблоне.

Если это невозможно, я не против использовать:

<Setter Property="OverridesDefaultStyle" Value="True"/>

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

Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

РЕДАКТИРОВАТЬ: было отмечено, что все шаблоны управления по умолчанию доступны на MSDN , что делает нижеприведенное значение, но я оставлю это здесь для интереса.

При наличии экземпляра элемента управления вы получаете сериализацию разметки для шаблона элемента управления с использованием класса System.Windows.Markup.XamlWriter.

Чтобы получить шаблон управления:

string markup = System.Windows.Markup.XamlWriter.Save(control.Template);

Чтобы получить полный дамп (включая триггеры и т. Д.) Шаблона управления, используйте.

        StringBuilder markupBuilder = new StringBuilder();

        XmlWriter writer = XmlWriter.Create(markupBuilder);

        System.Windows.Markup.XamlDesignerSerializationManager manager = 
            new System.Windows.Markup.XamlDesignerSerializationManager(writer);

        manager.XamlWriterMode = System.Windows.Markup.XamlWriterMode.Value;

        // data grid named dataGrid1
        var template = dataGrid1.Template;

        System.Windows.Markup.XamlWriter.Save(dataGrid1.Template, manager);

        string markup = markupBuilder.ToString();

Если вы просто хотите изменить цвет переднего плана DataGrid, когда он отключен, вы сможете использовать стили вместе с триггерами, а не заменять весь шаблон.

<DataGrid>
    <DataGrid.Resources>
        <Style
            TargetType="{x:Type DataGridColumnHeader}">
            <Style.Triggers>
                <DataTrigger
                    Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                    Value="False">
                    <Setter
                        Property="Foreground"
                        Value="Green" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <Style
            TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger
                    Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                    Value="False">
                    <Setter
                        Property="Foreground"
                        Value="Green" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
    <!-- Column Definitions -->
</DataGrid>

Добавление двух вышеуказанных стилей к коллекции ресурсов DataGrid приведет к тому, что передний план каждого заголовка столбца и ячейки строки данных станет зеленым, когда DataGrid отключен.

0 голосов
/ 14 марта 2012

Чтобы определить отключенное поведение любого элемента управления, вы должны соответствующим образом изменить визуальное состояние «Отключено» в шаблоне элемента управления.

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