2017-02-16 11 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; 
} 

方法ViewModelににこれにより

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

:これまでに、あなたは以下のXAMLを持っています通常のCaliburn.Micro規則を次

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

どのように私はいないInnerClick()OuterClick()の両方が上がっていることを確認することができますInnerButtonをクリックするとどうなりますか?

EDIT:代わりに、どのような種類のコントロールを使用できますか?あなたのviewmodelで

+1

ネストされたボタン?何のナンセンスはこれです。この種のシナリオはいつかthedailywtf.comに掲載される予定なので、あなたはこのケースに適応するためにキャリバーンを維持する人物を得ることはできません。 – Dbl

+0

@Sinatrは "__not__"をスキップしません。 – grek40

+0

私は ''と内部ボタンの周りに他のコンポーネントを置くことができるので、最も外側の要素にクリックイベントを付けることができます。要素を含むリストが必要ですが、要素をクリックする必要がありますが、要素内のボタンをクリックする必要があります(要素自体をクリックせずに)。 – 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と1つのイベントを適用します。

これが役に立ちます。

関連する問題