AxlDeLarge
@AxlDeLarge

У какого элемента надо подавить событие, чтобы все верно работало?

Требуется с помощью Grid и StackPanel создать форму, состоящую из трех TextBlock'ов.
Создать события MouseLeftButtonDown для «textBlock'ов», StackPanel, Грида(Grid) и окна(Window).

При клике на «textblock 1» с помощью пузырькового события на месте TextBlock должно выводиться «textblock1 + stackpanel + grid». При нажатии на «textBlock 2» - только «textblock2 + grid + window». Работает правильно только «textblock 1», а при на нажатии на «textBlock 2» выдает «textblock2 + stackpanel + grid + window». Как сделать, чтобы выводило только «textblock2 + grid + window»?

Title="MainWindow" Height="350" Width="525" MouseLeftButtonDown="Window_MouseLeftButtonDown">
        <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
        <StackPanel x:Name="st1" MouseLeftButtonDown="st1_MouseLeftButtonDown">
            <Grid Height="320">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock Grid.Column="1" Grid.Row="0"
                   Text="TextBlock" x:Name="tbResult"/>
            <TextBlock Grid.Column="0" Grid.Row="2"
                   Text="textBlock 1" x:Name="tb1" MouseLeftButtonDown="tb1_MouseLeftButtonDown"/>
            <TextBlock Grid.Column="2" Grid.Row="2"
                   Text="textBlock 2" x:Name="tb2" MouseLeftButtonDown="tb2_MouseLeftButtonDown"/>
        </Grid>
    </StackPanel>
</Grid>

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            tbResult.Text += " + window";
        }
        private void st1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            tbResult.Text += " + stackpanel";
        }
        private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            tbResult.Text += " + grid";
            if(((TextBlock)e.OriginalSource).Name == "tb1")
            {
                e.Handled = true;
            }            
        }
        private void tb1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            tbResult.Text = "textBlock1";
        }
        private void tb2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            tbResult.Text = "textBlock2";
        }
    }
}
  • Вопрос задан
  • 2658 просмотров
Пригласить эксперта
Ответы на вопрос 1
@asvishnyakov
Программист
private void st1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource.Name != "tb2")
    {
        tbResult.Text += " + stackpanel";
    }
}


Хотя я не понимаю, зачем вам это надо. И в целом код ужасен, даже мой =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы