Entwickler-Ecke

WPF / Silverlight - WPF mit SetResourceReference aber im Codebehind


mmgg - Sa 28.06.14 20:22
Titel: WPF mit SetResourceReference aber im Codebehind
ich quäl mich gerad mit dem setzten einer Resource im behindCode.
Ein Beispiel von dieser Seite
http://blog.texturenland.de/2009/01/wpf-ressourcen-uber-codebehind-setzen/
das workd auch aber nur solang ich den resourcencode nicht ändere.

Dies ist ein XAML Code der einen Button rund macht, solang ich dei resource im XAML code aufrufe. Kommt der Aufruf aus dem Behindcode tut sich nichts.


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<Window.Resources>
        <ControlTemplate x:Key="ButtonKreis">            
                <Ellipse x:Name="Kreis1" Width="30" Height="30">
                    <Ellipse.Fill>
                        <LinearGradientBrush StartPoint="5,0" EndPoint="0,8">
                            <GradientStop Offset="2" Color="Green"/>
                            <GradientStop Offset="7" Color="Yellow"/>
                        </LinearGradientBrush>
                    </Ellipse.Fill>
                </Ellipse>           
        </ControlTemplate>
    </Window.Resources>

 <Grid>
        <Button Name="btnButton1"></Button
    </Grid>


Im behindCode setzt ich es dann so
Code:


C#-Quelltext
1:
2:
3:
4:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
  this.btnButton1.SetResourceReference(BackgroundProperty, "ButtonKreis");
}


Ruf ich die Resource im XAML Code auf, hab ich meinen runden button

XML-Daten
1:
<Grid><Button Name="btnButton1" Template="{StaticResource ButtonKreis}">KreisButton</Button></Grid>                    

Nur über behind läufts nicht, es gibt aber auch keinen Error, der Button füllt die gesamte Fläche aus, mehr nicht.

Moderiert von user profile iconTh69: Code- durch XML-Tags ersetzt


Th69 - Sa 28.06.14 22:19

Hallo und :welcome:

der Blogbeitrag bezieht sich aber auf eine Resource, welche der Eigenschaft Background zugewiesen wird. Du möchtest aber ein Template setzen - dies sollte also entweder mittels

C#-Quelltext
1:
this.btnButton1.SetResourceReference(TemplateProperty, "ButtonKreis");                    

oder

C#-Quelltext
1:
this.btnButton1.Template = (DataTemplate)FindResource("ButtonKreis");                    

funktionieren.


mmgg - So 29.06.14 18:03

man dankt, auch für die Zugabe mit "Finderesource"
Dass da eine andere Property sein muss leuchtet ein, war mir bis jetzt aber nicht aufgefallen.