Скопировать стили из `System.Windows.Controls.Button` в мой пользовательский элемент управления? - PullRequest
0 голосов
/ 03 мая 2011

Хорошо. Я совершенно новичок в создании пользовательских элементов управления в WPF, поэтому мне нужно МНОГО руководства. Я хочу сделать кнопку крошки, как в этой статье , но на этот раз в WPF.
Я думаю, что могу понять, как рисовать фигуры ... После тяжелой работы, но теперь у меня есть еще одна проблема.
Мне буквально НУЖНО получить и использовать фоновую кисть стандартного неизменного System.Windows.Controls.Button при рисовании моего фона!

Edit:


Пожалуйста, помогите мне ...

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPF_Bread_Crumb_Button"
    xmlns:my="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">

    <Style TargetType="{x:Type local:Crumb}">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:Crumb}">
                    <my:ButtonChrome Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" Name="Chrome" RenderDefaulted="{TemplateBinding Button.IsDefaulted}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}" RenderPressed="{TemplateBinding ButtonBase.IsPressed}" SnapsToDevicePixels="True">
                        <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" Margin="{TemplateBinding Control.Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" />
                    </my:ButtonChrome>
                    <ControlTemplate.Triggers>
                        <Trigger Property="UIElement.IsKeyboardFocused" Value="True">
                            <Setter Property="my:ButtonChrome.RenderDefaulted" TargetName="Chrome" Value="True" />
                        </Trigger>
                        <Trigger Property="ToggleButton.IsChecked" Value="True">
                            <Setter Property="my:ButtonChrome.RenderPressed" TargetName="Chrome" Value="True" />
                        </Trigger>
                        <Trigger Property="UIElement.IsEnabled" Value="False">
                            <Setter Property="Control.Foreground" Value="#FFADADAD" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

В конструкторе выберите кнопку, откройте ее свойства, щелкните правой кнопкой мыши заголовок шаблона и выберите «Извлечь значение из ресурса», затем выберите файл назначения.

Extract Template

Он скопирует шаблон WPF по умолчанию в конечный xaml-файл с указанным вами ключом; обычно это лучшая отправная точка для переопределения шаблонов в WPF.

2 голосов
/ 03 мая 2011

Стиль по умолчанию можно найти на MSDN (есть ссылка «Темы WPF по умолчанию»), просто нужно найти правильный градиент в стиле.

Это значение по умолчаниюфон:

    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#F3F3F3" Offset="0"/>
        <GradientStop Color="#EBEBEB" Offset="0.5"/>
        <GradientStop Color="#DDDDDD" Offset="0.5"/>
        <GradientStop Color="#CDCDCD" Offset="1"/>
    </LinearGradientBrush>
0 голосов
/ 11 мая 2011

Также есть возможность использовать StyleSnooper для извлечения стиля из элемента управления WPF.

Для отладки WPF во время выполнения может быть полезно использование Snoop (совершенно другой, но действительно потрясающий инструмент). Просматривая разрабатываемое приложение, попробуйте нажать Ctrl-Shift и навести курсор на интересующие вас элементы управления.

...