Frage

Ich habe folgende Steuervorlage.

Ich wünsche die Quelleigenschaft für die Bildsteuerung der Steuerung einstellen Vorlage Vorlage Bindung.

Da dies aber eine Steuer Vorlage für Tastensteuerung ist und die Steuertaste nicht habe Quelleigenschaft, ich nicht Template in diesem Fall verwenden kann.

<ControlTemplate x:Key="BtnTemplate" TargetType="Button">
        <Border CornerRadius="5"  Margin="15" Cursor="Hand">
            <StackPanel>
                <Image Name="Img" Style="{StaticResource ImageStyle}" Source="temp.jpg" Height="100" Width="100" Margin="5"></Image>
                <Label Content="{TemplateBinding Content}" Background="Transparent" Margin="2"></Label>
            </StackPanel>
        </Border>
    </ControlTemplate>

Da ich verschiedene Bilder für verschiedene Instanzen von Taste setzen habe, kann ich hart codiert den Weg nicht so gut.

Bitte lassen Sie mich wissen, wie diese Situation zu bewältigen.

War es hilfreich?

Lösung

Ich würde vorschlagen, dynamische Ressourcen, z.B. definieren Sie die Vorlage wie folgt:

<ControlTemplate x:Key="buttonTemplate" TargetType="Button">
    <Border CornerRadius="5"  Margin="15" Cursor="Hand">
        <StackPanel Orientation="Horizontal" Background="Yellow">
            <Image Source="{DynamicResource ResourceKey=Img}" Height="100" Width="100" Margin="5"></Image>
            <Label Content="{TemplateBinding Content}" Background="Transparent" Margin="2"></Label>
        </StackPanel>
    </Border>
</ControlTemplate>

Und es wie folgt verwendet werden:

<Button Content="Button" Template="{StaticResource ResourceKey=buttonTemplate}">
    <Button.Resources>
        <ImageSource x:Key="Img">SomeUri.png/</ImageSource>
    </Button.Resources>
</Button>

Andere Tipps

Template ist ein leichter „Bindung“, ist es nicht einige Merkmale der traditionellen Unterstützung Bindung, wie automatisch Umwandlung geben Sie den bekannten Typ-Wandler mit der Zieleigenschaft (wie Umwandlung der Zeichenfolge URI in eine Bitmapsource-Instanz) zugeordnet werden.

Der folgende Code richtig arbeiten kann:

<Window x:Class="GridScroll.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2">
<Window.Resources>
    <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="5"  Margin="15" Cursor="Hand" Background="Red">
                        <StackPanel Orientation="Horizontal" Background="White">
                            <Image Name="Img" Source="{Binding Path=Tag, RelativeSource={RelativeSource TemplatedParent}}" Margin="5"></Image>
                            <Label Content="{TemplateBinding Content}" Margin="2"></Label>
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


</Window.Resources>
<StackPanel Orientation="Horizontal">
    <Button Style="{StaticResource ButtonStyle}" Tag="a.jpeg" Content="a"/>
    <Button Style="{StaticResource ButtonStyle}" Tag="b.png" Content="b"/>
</StackPanel>

Sie haben wirklich nicht sagen, wie Sie erwarten, dass die Verbraucher Ihrer Taste, um die Quelle zu setzen. Sie konnten die Button.Tag Eigenschaft verwenden, zum Beispiel, und dann an, dass banden in Ihrer Vorlage. Oder Sie könnten Ihre eigene Kontrolle definieren:

public class ImageButton : Button
{
    // add Source dependency property a la Image
}

Und dann die Vorlage:

<ControlTemplate TargetType="ImageButton">
    <Border CornerRadius="5"  Margin="15" Cursor="Hand">
        <StackPanel>
            <Image Name="Img" Style="{StaticResource ImageStyle}" Source="{TempateBinding Source}" Height="100" Width="100" Margin="5"></Image>
            <Label Content="{TemplateBinding Content}" Background="Transparent" Margin="2"></Label>
        </StackPanel>
    </Border>
</ControlTemplate>

Ich bin nicht sicher, dass ich das Problem verstand sehr gut, aber warum nicht Content verwenden? Es ermöglicht den Code für Ihr Bild auf der höheren Ebene zu bewegen.

<ControlTemplate x:Key="BtnTemplate" TargetType="Button">
  ...
  <ContentPresenter/>
</ControlTemplate>
...
<Button Template="{StaticResource BtnTemplate}">
  <Image .../>
</Button>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top