左键单击stackpanel
本文关键字:stackpanel 单击 | 更新日期: 2023-09-27 18:14:53
我有一个带有图像和按钮的stackpanel。我想当用户单击stackPanel中的按钮时触发事件。我在xaml中的代码是
<StackPanel x:Uid="TemperatureMonitor" Orientation="Horizontal" HorizontalAlignment="Left" ToolTip="{DynamicResource InstrumentZweiMesswert}" Height="35">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseLeftButtonDown">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="OnAddUserControl"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Image Width="35" Height="35" x:Uid="Image_15" Source="/Resources'png'TemperatureMonitor.png"/>
<Button x:Uid="TemperatureMonitor" Content="Temperatur Monitor" x:Name="TemperatureMonitor" IsEnabled="True" Width="135"/>
</StackPanel>
方法OnAddUserControl在我的viewModel是
public void OnAddUserControl(object sender, RoutedEventArgs e)
{
//some code
}
问题是我没有进入OnAddUserControl。知道为什么吗?
我想在用户左键点击按钮时触发此事件。我不知道为什么,但是RelayCommand也没有帮助也没有触发OnAddUserControl方法。当我将交互代码移动到按钮时,它看起来像这样:
<StackPanel Background="Black" x:Uid="TemperatureMonitor" Orientation="Horizontal" HorizontalAlignment="Left" ToolTip="{DynamicResource InstrumentZweiMesswert}" Height="35">
<Image Width="35" Height="35" x:Uid="Image_15" Source="/Resources'png'TemperatureMonitor.PNG"/>
<Button x:Uid="TemperatureMonitor" Content="Temperatur Monitor" x:Name="TemperatureMonitor" IsEnabled="True" Width="135" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseLeftButtonDown">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="OnAddUserControl"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
我得到在运行时错误,说"对于对象类型"DockSite"找不到方法名"OnAddUserControl"。如有任何建议或帮助,我将不胜感激
您可以使用RelayCommand来实现此目的。将RelayCommand.cs添加到项目中。
class RelayCommand : ICommand
{
private Action<object> _action;
public RelayCommand(Action<object> action)
{
_action = action;
}
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (parameter != null)
{
_action(parameter);
}
else
{
_action("Hello World");
}
}
#endregion
}
这是ViewModel。我把这个叫做MainWindowViewModel。因此,将MainWindowViewModel.cs类添加到您的解决方案中。
class MainWindowViewModel
{
private ICommand m_ButtonCommand;
public ICommand ButtonCommand
{
get
{
return m_ButtonCommand;
}
set
{
m_ButtonCommand = value;
}
}
public MainWindowViewModel()
{
ButtonCommand=new RelayCommand(new Action<object>(ShowMessage));
}
public void ShowMessage(object obj)
{
MessageBox.Show(obj.ToString());
}
}
这是你的xaml:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<StackPanel>
<Button Width="220" Content="Click me" Command={Binding ButtonCommand} CommandParameter="StackOverflow" />
</StackPanel>
点击按钮后会显示消息框。因此,您可以通过这种方式更改处理Button Click事件的项目。