Entwickler-Ecke

WPF / Silverlight - Button styles


Greenberet - Sa 28.07.07 10:36
Titel: Button styles
Hi,
schon bin ich bei meinem nächsten 2 Problemen^^



Christian S. - Sa 28.07.07 11:02

Hallo!

Wenn DU mal in der MSDN Library schaust, wirst Du unter "Button control template" (oder so ähnlich) den XAML Code finden, welcher für den Button zuständig ist.

Wenn Du den in Resources einfügst, kannst Du das Aussehen der Buttons beeinflussen. Nimmst Du die Resources-Sektion des Windows, so werden alle Buttons darin gestylt, Du kannst aber auch die Resourcen nur eines Buttons nehmen, dann wird nur dieser gestylt.

Weitere Möglichkeit: Du gibst dem Style einen Key (x:Key="foobar") und kannst ihn dann einzelnen Butttons zuweisen (Style="{DynamicResource foobar}").

Grüße
Christian


//edit: Ach ja, an das Control Template kommst Du auch über Blend, wenn Du dort rechts auf eine Komponente klickst und dann "Edit Control Parts (template) -> Edit a copy" wählst.


Greenberet - Sa 28.07.07 12:39

ich hab jetzt mal versucht einfach mal testweise ein rechteck das mit orange gefüllt ist darzustellen für den button.
aber sobald ich das setz, wird der button nicht dargestellt

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
    <Style x:Key="CXMButton" TargetType="{x:Type Button}">
      <Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate>
            <Rectangle Fill="Orange" />
          </ControlTemplate>
        </Setter.Value>
      </Setter>
      <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
          <Setter Property="BitmapEffect">
            <Setter.Value>
              <BitmapEffectGroup>
                <OuterGlowBitmapEffect GlowColor="Goldenrod" GlowSize="5"/>
              </BitmapEffectGroup>
            </Setter.Value>
          </Setter>
        </Trigger>
      </Style.Triggers>
    </Style>


Christian S. - Sa 28.07.07 13:12

Das hier tut's bei mir:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
<Window x:Class="WindowsApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WindowsApplication4" Height="300" Width="300"
    >
  <Window.Resources>
    <SolidColorBrush x:Key="ButtonBackgroundBrush" Color="#DDD" />

    <Style x:Key="CXMButton" TargetType="{x:Type Button}">
      <Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate>
            <Rectangle Fill="Orange" />
          </ControlTemplate>
        </Setter.Value>
      </Setter>
      <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
          <Setter Property="BitmapEffect">
            <Setter.Value>
              <BitmapEffectGroup>
                <OuterGlowBitmapEffect GlowColor="Goldenrod" GlowSize="5"/>
              </BitmapEffectGroup>
            </Setter.Value>
          </Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>

    <Grid>
    <Button Style="{DynamicResource CXMButton}" Width="200" Height="100" />

  </Grid>
</Window>


Allerdings würde ich anstatt eines Rectangle eine Border nehmen, weil Du da dann noch den ContentPresenter rein packen kannst.


Greenberet - Sa 28.07.07 16:27

ok hab den fehler gefunden, durch das überschreiben des controltemplates wird die größe nicht mehr dynamisch zum context erstellt.

vielen danke für deine hilfe