2014-12-28 2 views
2

У меня есть окно с прозрачным фоном (не null). Внутри этого окна у меня есть пользовательский элемент управления, также с прозрачным фоном.Прозрачное управление не захватывает события мыши

Окно принимает события мыши, но пользовательский элемент управления не поддерживает.

Если я изменил фон пользовательского элемента управления с Transparent на #01000000, тогда пользовательский элемент управления начнет получать события мыши. Однако элементы управления, размещенные внутри пользовательского элемента управления (которые сами видны), никогда не получают событий мыши, независимо от фона пользовательского элемента управления.

Любые идеи?

+1

Если вы используете Snoop, одевается и смотрите на вкладке «События», чтобы увидеть, какие события распространятся и где. – codekaizen

+0

@codekaizen Snoop показал, что причина, по которой дочерние элементы управления не получали события, была связана с тем, что на них был еще один контроль, который принимал события. Все еще не уверен, почему прозрачные фоны не получают события. –

ответ

0

Должно быть что-то обрабатывающее событие или у вас есть проблема с настройкой, так как он работает нормально для меня: http://share.linqpad.net/ijx3vb.linq. (Get Linqpad free.)

var t = new TextBlock() { Text = "test" }; 

var uc1 = new UserControl() { Background = new SolidColorBrush(Colors.Transparent) }; 
uc1.MouseEnter += (s, args) => { t.Text = "UC1"; }; 

var uc2 = new UserControl() { Background = new SolidColorBrush(Color.FromArgb(01, 00, 00, 00)) }; 
uc2.MouseEnter += (s, args) => { t.Text = "UC2"; }; 

var g = new Grid(); 
g.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); 
g.RowDefinitions.Add(new RowDefinition()); 
g.RowDefinitions.Add(new RowDefinition()); 
g.Children.Add(t); 
g.Children.Add(uc1); 
g.Children.Add(uc2); 

Grid.SetRow(t, 0); 
Grid.SetRow(uc1, 1); 
Grid.SetRow(uc2, 2); 

PanelManager.DisplayWpfElement(g); 
Смежные вопросы