gpt4 book ai didi

c# - 鼠标左键单击堆栈面板

转载 作者:行者123 更新时间:2023-12-03 10:29:06 25 4
gpt4 key购买 nike

我有一个带有图像和按钮的堆栈面板。当用户单击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>

我的viewModel中的方法OnAddUserControl是
public void OnAddUserControl(object sender, RoutedEventArgs e)
{
//some code
}

我不了解OnAddUserControl的问题。有什么想法吗?

当用户在按钮上单击leftMouseClick时,我想触发此事件。所以我不知道为什么,但是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>

单击按钮后将显示messageBox。因此,您可以通过这种方式更改项目来处理Button Click事件。

关于c# - 鼠标左键单击堆栈面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16690025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com