无法 pass/bind 单击事件到 WPF 用户控件
Cannot pass/bind click event to WPF user control
我正在尝试将点击事件传递给 WPF 用户控件中的按钮。
我的用户控件的 xaml 部分:
<UserControl>
<Grid>
<Button Name="btnlrg"
Command="{Binding Command, RelativeSource={RelativeSource AncestorType={x:Type local:ButtonLarge}}}"
Click="{Binding Click, RelativeSource={RelativeSource AncestorType={x:Type local:ButtonLarge}}}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<!-- shortened -->
</StackPanel>
</Button.Content>
</Button>
</Grid>
</UserControl>
我的用户控件的 c# 部分:
public partial class ButtonLarge : UserControl
{
public ButtonLarge()
{
InitializeComponent();
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ButtonLarge), new UIPropertyMetadata(""));
public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(ButtonLarge), new UIPropertyMetadata(null));
//Make Commands available in UserControl
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(ButtonLarge));
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
//Make Click Event available in UserControl
public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonLarge));
public event RoutedEventHandler Click
{
add { btnlrg.AddHandler(ButtonLarge.ClickEvent, value); }
remove { btnlrg.RemoveHandler(ButtonLarge.ClickEvent, value); }
}
}
用户控件的使用:
<ui:ButtonLarge Image="{StaticResource Icon}" Text="Ok" Click="newClickEvent"/>
我不能在这里继续:(有人可以帮我吗?
您可以简单地让成员变量访问 Button:
<Button x:Name="button" .../>
然后在 UserControl 中声明一个 Click
事件并将处理程序直接添加到 Button:
public event RoutedEventHandler Click
{
add { button.AddHandler(ButtonBase.ClickEvent, value); }
remove { button.RemoveHandler(ButtonBase.ClickEvent, value); }
}
或者像这样:
public static readonly RoutedEvent ClickEvent =
ButtonBase.ClickEvent.AddOwner(typeof(ButtonLarge));
public event RoutedEventHandler Click
{
add { button.AddHandler(ClickEvent, value); }
remove { button.RemoveHandler(ClickEvent, value); }
}
我正在尝试将点击事件传递给 WPF 用户控件中的按钮。
我的用户控件的 xaml 部分:
<UserControl>
<Grid>
<Button Name="btnlrg"
Command="{Binding Command, RelativeSource={RelativeSource AncestorType={x:Type local:ButtonLarge}}}"
Click="{Binding Click, RelativeSource={RelativeSource AncestorType={x:Type local:ButtonLarge}}}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<!-- shortened -->
</StackPanel>
</Button.Content>
</Button>
</Grid>
</UserControl>
我的用户控件的 c# 部分:
public partial class ButtonLarge : UserControl
{
public ButtonLarge()
{
InitializeComponent();
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ButtonLarge), new UIPropertyMetadata(""));
public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(ButtonLarge), new UIPropertyMetadata(null));
//Make Commands available in UserControl
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(ButtonLarge));
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
//Make Click Event available in UserControl
public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonLarge));
public event RoutedEventHandler Click
{
add { btnlrg.AddHandler(ButtonLarge.ClickEvent, value); }
remove { btnlrg.RemoveHandler(ButtonLarge.ClickEvent, value); }
}
}
用户控件的使用:
<ui:ButtonLarge Image="{StaticResource Icon}" Text="Ok" Click="newClickEvent"/>
我不能在这里继续:(有人可以帮我吗?
您可以简单地让成员变量访问 Button:
<Button x:Name="button" .../>
然后在 UserControl 中声明一个 Click
事件并将处理程序直接添加到 Button:
public event RoutedEventHandler Click
{
add { button.AddHandler(ButtonBase.ClickEvent, value); }
remove { button.RemoveHandler(ButtonBase.ClickEvent, value); }
}
或者像这样:
public static readonly RoutedEvent ClickEvent =
ButtonBase.ClickEvent.AddOwner(typeof(ButtonLarge));
public event RoutedEventHandler Click
{
add { button.AddHandler(ClickEvent, value); }
remove { button.RemoveHandler(ClickEvent, value); }
}