Jak ustawić defaultowy template dla buttona?

0

Daje gdzieś w kodzie coś takiego:

btn.Template = (ControlTemplate)this.FindResource("Temp1");

Ale później w razie potrzeby chce wrócić do defaultowego templata, jak to zrobić?
Próbowałem

Button b = new Button();
btn.Template = b.Template;
ControlTemplate ct = new ControlTemplate(typeof(Button));
btn.Template = ct;

Nie mogę nic znaleźć na ten temat.

0

Trochę strzelam ale może wystarczy null podstawić?

0

Nie tego też próbowałem i nie działa, zapomniałem podać.

1

W designerze jak dodajesz nowy button to w jego ustawieniach wybierz "miscellaneous" -> "Template" -> "Convert to new Resources". Potem możesz używać go już normalnie jak inne resources.

A co do:

btn.Template = new ControlTemplate(typeof(Button));

Nie tworzy domyślnych triggerów więc i tak nie będzie działać prawidłowo.

i:

Button b = new Button();
btn.Template = b.Template;

Tutaj nie zostanie wygenerowany domyślny Template.

0

Nie działa.
Generuje się coś takiego:

<Window.Resources>
        <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
            <Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="True">
                <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </Themes:ButtonChrome>
            <ControlTemplate.Triggers>
                <Trigger Property="IsKeyboardFocused" Value="True">
                    <Setter Property="RenderDefaulted" TargetName="Chrome" Value="True"/>
                </Trigger>
                <Trigger Property="ToggleButton.IsChecked" Value="True">
                    <Setter Property="RenderPressed" TargetName="Chrome" Value="True"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="#FFADADAD"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Window.Resources>

i coś takiego

xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

Ale jest błąd:
Error 1 The type 'Themes:ButtonChrome' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built. C:\Users\Damian\Documents\Visual Studio 2013\Projects\ImageTest\ImageTest\MainWindow.xaml 8 14 ImageTest
Error 2 The tag 'ButtonChrome' does not exist in XML namespace 'clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero'. Line 8 Position 14. C:\Users\Damian\Documents\Visual Studio 2013\Projects\ImageTest\ImageTest\MainWindow.xaml 8 14 ImageTest

Trzeba dodać jakieś referencje?

1

Tak musisz dodać "PresentationFramework.Aero"
zresztą samo Ci podpowiedziało. ;)

xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
0

Racja działa, dzięki.
Ja próbowałem dodać Microsoft.Windows.Themes ale nie znalazłem czegoś takiego :P

Swoją drogą wczoraj zapytałem też o to na stackoverflow i dowiedziałem się że muszę sklonować templatkę.
Odesłano mnie do kodu na jakieś 400 linijek, uznałem że aż tak to mi nie zależy :P A tu mam proste rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1