Frage

Ich habe eine Steuerung und ein Befehlstextbox implementiert, das ich ein Textfeld mit einer Schaltfläche daneben sein möchte (so dass es fast im Textfeld angezeigt wird).

Die Schaltfläche sollte ein Bild sein, das ich an ein Symbol binden kann. Es ist ziemlich gerades Foward -Zeug ...

public class CommandTextBox : TextBox
{
    /// <summary>
    /// The image property.
    /// </summary>
    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(
        "Image", typeof(ImageSource), typeof(CommandTextBox), null);

    /// <summary>
    ///     Initializes a new instance of the <see cref = "CommandTextBox" /> class.
    /// </summary>
    public CommandTextBox()
    {
        this.DefaultStyleKey = typeof(CommandTextBox);
    }

    /// <summary>
    ///     Gets or sets the image.
    /// </summary>
    /// <value>
    ///     The image.
    /// </value>
    public ImageSource Image
    {
        get
        {
            return (ImageSource)this.GetValue(ImageProperty);
        }

        set
        {
            this.SetValue(ImageProperty, value);
        }
    }
}

Ich habe eine Vorlage wie folgt ...

<Style TargetType="Controls:CommandTextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Controls:CommandTextBox">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>

                        <TextBox Grid.Column="0" Text="{TemplateBinding Text}"/>

                        <Button Grid.Column="1" 
                                Content="Search" >
                            <Button.Template>
                                <ControlTemplate>
                                    <Image Source="{TemplateBinding Image}" />
                                </ControlTemplate>
                            </Button.Template>
                        </Button>

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

Aber ich erhalte einen Fehler aufgrund der Vorlagenbindung im Bild. Ich verstehe, warum sich die Vorlage jetzt geändert hat, sodass sich der bindende Kontext nicht derselbe nicht verändert hat, aber ich weiß nicht, wie ich sie überwinden soll.

Muss ich eine separate ImageButton -Steuerung erstellen, damit ich einfach eine normale Vorlagebindung durchführen kann oder gibt es einen anderen Weg?

Danke Ben

War es hilfreich?

Lösung

Ich habe es geschafft, dies zum Laufen zu bringen, indem ich den Stil wie folgt ändert:

    <Style TargetType="appControls:CommandTextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="appControls:CommandTextBox">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBox Grid.Column="0" Text="{TemplateBinding Text}"/>
                        <Button Grid.Column="1" >
                            <Button.Content>                                
<Image DataContext="{TemplateBinding Image}" Source="{Binding}" />                               
                            </Button.Content>
                        </Button>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Ich benutze keine separate Vorlage für die Taste. Mein XAML mit der Kontrolle ist:

<controls:CommandTextBox Text="Text" Image="/MyApp.Silverlight;component/Assets/Images/Amber_Triangle.png"></controls:CommandTextBox>

Dies scheint das Ergebnis zu erzielen, nach dem Sie gesucht haben. Die Steuerung macht wie erwartet auf meiner Testseite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top