myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- GUI: WPF und XAML (https://www.mycsharp.de/wbb2/board.php?boardid=85)
--- Wie kann ich außerhalb des ContentPresenters ein Image über das Binding setzen? (https://www.mycsharp.de/wbb2/thread.php?threadid=121800)


Geschrieben von Snoppie am 21.04.2019 um 02:09:
  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:

XML-Code:
<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:

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

Vielen Dank für etwaige Hilfe.


Geschrieben von KroaX am 21.04.2019 um 08:47:
 
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/


Geschrieben von Snoppie am 21.04.2019 um 12:08:
 
Vielen Dank. Das Schlagwort "Attached Property" hats gemacht. Hab immer unter falschen Schlagwörtern gesucht.


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 11.12.2019 13:07