2012-05-23 3 views
0

У меня есть настраиваемый элемент управления с обработчиком событий, когда вы нажимаете на него. Все работает, и событие срабатывает правильно.Wpf пользовательский элемент управления mouseleftButtonDown область захвата

AddHandler (cu.MouseLeftButtonDown), AddressOf Me.DoSomething 

Когда элемент управления изменяет размеры, чтобы показать дополнительную информацию, он расширяется. Он также рушится, когда пользователь подает кнопку. Это работает хорошо. Но теперь, когда я нажимаю, где раньше была расширенная область, он все еще запускает левый элемент мыши на этом элементе управления. Я попытался установить IsHitTestVisible в false в расширенном элементе, но он не работал. Вот некоторые XAML ...

<UserControl x:Class="MyCustomControl"> 
    <StackPanel> 
     <Grid> 
      'Stuff thats always visible 
     </Grid> 
    <Border IsHitTestVisible="False" Grid.Row="1" HorizontalAlignment="left" BorderThickness="1" VerticalAlignment="top" x:Name="overView" Background="#EEEEEE" Visibility="Hidden" Margin="-325,-95,0,0" Width="auto" Height="auto" Padding="5,5,5,5" BorderBrush="#999999" CornerRadius="3,3,3,3"> 
     <Border IsHitTestVisible="False" x:Name="myBorder" Margin="1" Width="300" Height="225" BorderThickness="1" BorderBrush="#999999" Background="#DDDDDD" CornerRadius="3,3,3,3" HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Rectangle IsHitTestVisible="False" x:Name="rtgOverView"> 
      </Rectangle> 
     </Border> 
    </Border> 
    </StackPanel> 
</UserControl> 

Обзор становится видимым, когда я использую этот код

overView.Visibility = Windows.Visibility.Visible 

И скрывает, когда я использую этот

OverView.Visibility = Windows.Visibility.Collapsed 

Я заполнить прямоугольник с визуалой. Это происходит при загрузке элемента управления.

rtgOverView.Fill = visual 

обзорном получает позиционируется в коде, как этого

If x > 350 Then 
     overView.HorizontalAlignment = Windows.HorizontalAlignment.Left 
     overView.Margin = New Thickness(-325, -95, 0, 0) 
    Else 
     overView.HorizontalAlignment = Windows.HorizontalAlignment.Right 
     overView.Margin = New Thickness(0, -95, -300, 0) 
    End If 

Я не могу использовать другой элемент вокруг моего customcontrol, так как я использую этот MouseLeftButtonDown на все различные виды контроля. Я не могу понять, как работают границы на мероприятии cu.MouseLeftButtonDown, чтобы исправить это.

ответ

1

Было что-то странное с размером стекольной панели. Это похоже на то, что свойство auto не уменьшает размер. Мне удалось это исправить. Когда мышь входит, я помещаю:

layoutroot.ClipToBounds = False 

Это позволяет мне показывать содержимое вне контроля. Когда мышь покидает я использую:

layoutroot.ClipToBounds = True 

Клип к связанным каким-то образом заставляет StackPanel на размер меньше.

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