Laden...

Wie kann ich außerhalb des ContentPresenters ein Image über das Binding setzen?

Erstellt von Snoppie vor 4 Jahren Letzter Beitrag vor 4 Jahren 948 Views
S
Snoppie Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
Wie kann ich außerhalb des ContentPresenters ein Image über das Binding setzen?

Guten Abend zusammen,

ich würde mich riesig über Hilfe bei einem Problem in sachen Binding freuen.

Es geht um das Binding einer Image-Source in einem Style. Ich würde gerne die Image über
das "MainWindow" setzen und finde aber keine wirkliche Hilfe die mir erklärt, wie ich außerhalb
des ContentPresenter etwas über das Binding setzen kann.

Zum besseren Verständnis, da ich keine Ahnung habe wie ich mich richtig ausdrücken soll, der Sytle:


<Style x:Key="RadioButtonMenu" TargetType="{x:Type RadioButton}">

        <Setter Property="Foreground" Value="White"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RadioButton}">


                    <Grid Name="MainBG" Background="Transparent">

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="6" />
                            <ColumnDefinition Width="6" />
                            <ColumnDefinition Width="16" />
                            <ColumnDefinition Width="32" />
                            <ColumnDefinition Width="16" />
                            <ColumnDefinition Width="6" />
                            <ColumnDefinition Width="6" />
                        </Grid.ColumnDefinitions>

                        <Grid.RowDefinitions>
                            <RowDefinition Height="16"/>
                            <RowDefinition Height="16"/>
                            <RowDefinition Height="16"/>
                            <RowDefinition Height="20"/>
                            <RowDefinition Height="12"/>
                        </Grid.RowDefinitions>

                        <Image Name="imgMenu" Grid.Column="3" Grid.ColumnSpan="1" Grid.Row="1" Grid.RowSpan="2" Source="{Binding Path=Source, RelativeSource={RelativeSource TemplatedParent}}"/>

                        <Grid Grid.Column="1"  Grid.ColumnSpan="5" Grid.Row="3" Grid.RowSpan="1" Background="Transparent">
                            <ContentPresenter x:Name="contentPresenter" 
                                              Focusable="False" 
                                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              Margin="{TemplateBinding Padding}" 
                                              RecognizesAccessKey="True" 
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Grid>

                        <Grid Name="BarSelection" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="5" Background="Transparent"/>

                    </Grid>

                    <ControlTemplate.Triggers>

                        <Trigger Property="IsChecked" Value="true">
                            <Setter TargetName="BarSelection" Property="Background" Value="#FF808D8F"/>
                            <Setter TargetName="MainBG" Property="Background" Value="#FF707A7C"/>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Es geht um die Image: Name="imgMenu". Der ContentPresenter soll einen Text anzeigen.
Das funktioniert auch recht gut. Nun würde ich gerne auch die "imgMenu" über den Aufrüf
im MainWindow setzen. Ca. so:


                <RadioButton Content="Start" 
                     Style="{StaticResource RadioButtonMenu}" 
                     Source="/App;component/Resources/Icons/start.png"/>

Vielen Dank für etwaige Hilfe.

301 Beiträge seit 2009
vor 4 Jahren

Ich glaube wenn du hier ein Attached Property verwendest ist das für dein Szenario der einfachste Weg ohne das Radiobutton Control selbst abzuleiten

https://dailydotnettips.com/how-to-create-an-attached-properties-in-wpf/

S
Snoppie Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren

Vielen Dank. Das Schlagwort "Attached Property" hats gemacht. Hab immer unter falschen Schlagwörtern gesucht.