2017-02-16 182 views
0

在常规的WPF中,您可以在另一个按钮内部有一个按钮,并且为了防止在单击内部按钮时引发两个按钮事件,可以使用以下XAML(根据this question ):按钮内部按钮(WPF + Caliburn.Micro)

<Button Click="OuterClick"> 
    <Grid> 
     <SomeOtherContent /> 
     <Button Click="InnerClick" /> 
    </Grid> 
</Button> 

然后在后台代码使用Handled属性上的事件,使得内按钮被点击时OuterClick没有提出:

private void OuterClick(object sender, RoutedEventArgs e) { 
    // Do something 
} 
private void InnerClick(object sender, RoutedEventArgs e) { 
    // Do something else 
    e.Handled = true; 
} 

如何以往,按照通常惯例Caliburn.Micro你有以下XAML:

<Button x:Name="OuterClick"> 
    <Grid> 
     <SomeOtherContent /> 
     <Button x:Name="InnerClick" /> 
    </Grid> 
</Button> 

有了这个视图模型:

private void OuterClick() { 
    // Do something 
} 
private void InnerClick() { 
    // Do something else 
} 

我怎样才能确保不同时InnerClick()OuterClick()上调当我点击InnerButton?

编辑:或者,我可以使用其他类型的控件吗?

+1

嵌套按钮?这是什么样的废话。我怀疑你会得到维持caliburn适应这种情况的人,因为这种情况是有一天将在dailywtf.com张贴... – Dbl

+0

@Sinatr不要跳过“__not__” – grek40

+0

什么我可以在我的''SomeOtherContent>''和内部按钮附近使用其他组件,以便我可以将点击事件附加到最外面的元素上?我需要一个包含元素的列表,并且我需要能够单击一个元素,但是我还必须能够单击元素内部的按钮(不单击元素本身)? – GTHvidsten

回答

0
<StackPanel cal:Message.Attach="[Event MouseDown]=[Action OuterClick()]"> 
    <StackPanel Orientation="Horizontal"> 
     <SomeotherContent /> 
     <Button x:Name="InnerClick" /> 
    </StackPanel> 
</StackPanel> 

在您的视图模型

public void OuterClick() 
{ 
    //Do something 
} 
public void InnerClick() 
{ 
    //Do something 
} 

使用的StackPanel和一个应用事件。

这会帮助你。