2017-02-16 7 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> 

С этим в ViewModel:

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

Как я могу убедиться, что оба не InnerClick()OuterClick() и приподняты когда я нажимаю InnerButton?

EDIT: Или, какие еще элементы управления можно использовать вместо этого?

+1

Вложенные кнопки? какая это глупость. Я сомневаюсь, что вы получите парня, который поддерживает калибр, чтобы приспособиться к этому делу, потому что этот сценарий является тем, который когда-нибудь будет опубликован на thedailywtf.com ... – Dbl

+0

@Sinatr не пропускает «__not__» – grek40

+0

Что другой компонент можно обойти вокруг моего ' 'и внутренней кнопки, чтобы я мог присоединить событие click к самому внешнему элементу? Мне нужно иметь список с элементами, и мне нужно иметь возможность щелкнуть элемент, но я также должен нажать кнопку внутри элемента (без щелчка самого элемента)? – GTHvidsten

ответ

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

В Вашей ViewModel

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

использование StackPanel и применять событие для того.

Это поможет вам.

 Смежные вопросы

  • Нет связанных вопросов^_^