Click-Ereignis von der Vorlage eines Benutzerdefinierten Steuerelements in WPF
Habe ich eine benutzerdefinierte ContentControl in WPF und angewendet wurde folgende Vorlage:
<Style TargetType="{x:Type local:BdlUserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:BdlUserControl">
<Grid x:Name="ContentGrid">
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="White">
<StackPanel HorizontalAlignment="Right">
<Button Content="Close" Width="50" Name="BtClose" Click="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BtClose_Click}"/>
</StackPanel>
</Grid>
<Grid Grid.Row="1">
<ContentPresenter Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Das problem ist, dass die BtClose nicht, rufen Sie die Methode BtClose_Click deklariert im code-behind der custom control, wie unten gezeigt:
public void BtClose_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("Test");
}
Der Fehler ist sehr allgemein:
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll
Irgendwelche Tipps, warum ist das passiert?
- Sie kann nicht Binden an einen event-handler, die Sie benötigen, um einen Befehl zu erstellen und binden Sie die Tasten Command-Eigenschaft an, dass das Kommando.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In WPF können Sie nur binden, um eine
DependencyProperty
Im WPF-Buttons haben Sie eine Command-Eigenschaft, die Sie Binden können. Befehle sind das MVVM-Methode zum behandeln von Ereignissen in der WPF.Hier ist ein kurzes Beispiel für einen Befehl binding in WPF.
Xaml:
Code:
In dem obigen Beispiel die
Execute
Methode inMyClickCommand
wird aufgerufen, wenn Sie auf die Schaltfläche klicken.Nun, um diese ein wenig mehr benutzerfreundlich, können Sie eine
RelayCommand
Implementierungen, dies ermöglicht eine pass-Delegierte in die Command-Implementierung, die in den meisten Fällen ist der einfachste Weg, verwenden Sie die Befehle in WPF.Beispiel:
Xaml:
Code:
Beispiel: