【发布时间】:2020-09-01 04:46:49
【问题描述】:
我使用以下 XAML 构建了一个自定义控件
<StackPanel Name="spTop">
<Button Name="btnDBConfiguration" HorizontalAlignment="Center" Background="Transparent" HorizontalContentAlignment="Left" MouseEnter="btnDBConfiguration_MouseEnter" MouseLeave="btnDBConfiguration_MouseLeave" >
<StackPanel Orientation="Vertical">
<Image Source="/Images/DBImport25px.png" Width="40" Height="40" VerticalAlignment="Center" HorizontalAlignment="Center" Name="imgVerify"></Image>
<TextBlock Foreground="AntiqueWhite" Background="Black" VerticalAlignment="Center" Name="tblkConnectionName" >Database</TextBlock>
</StackPanel>
</Button>
<!--
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Name="DBImport">
<Image Source="/Images/DBImport25px.png" VerticalAlignment="Center" HorizontalAlignment="Center"></Image>
<TextBlock Text="Database" Foreground="AntiqueWhite"/>
</StackPanel>-->
<Border BorderBrush="Gray" BorderThickness="1" Width="50">
<StackPanel Orientation="Horizontal" Name="spButtonBar" MouseEnter="btnDBConfiguration_MouseEnter" MouseLeave="btnDBConfiguration_MouseLeave" >
<Button Name="btnDBConnection" HorizontalAlignment="Left" Background="Transparent" HorizontalContentAlignment="Left" ToolTip="DB Connection" Click="btnDBConnection_Click" >
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Image Source="/Images/dbConfig25px.png" VerticalAlignment="Center" HorizontalAlignment="Left" Name="imgDBConnection"></Image>
</StackPanel>
</Button>
</StackPanel>
</Border>
</StackPanel>
当我使用这一行手动将其添加到画布时,此控件内的按钮起作用:
<Control:dbButtonControl Grid.Column="1" VerticalAlignment="Center" />
但是,当我使用此代码通过拖放动态添加它时:
dbButtonControl cntrlDBButton = new dbButtonControl();
cntrlDBButton.SetNameText(ObjectTitle);
cntrlDBButton.PreviewMouseDown += CnvsLinkScreen_PreviewMouseDown;
Canvas.SetLeft(cntrlDBButton, pntEnterPoint.X);
Canvas.SetTop(cntrlDBButton, pntEnterPoint.Y);
cnvsLinkScreen.Children.Add(cntrlDBButton);
自定义控件中的按钮不再起作用。我添加了一个 previewmousedown 事件,因此我可以单击并在页面周围拖动控件。我禁用了此事件,控件中的按钮再次开始工作。所以看起来我添加的预览鼠标按钮事件导致了它。但我确实需要启用它并使控件中的按钮仍然有效。我该如何解决这个问题?
【问题讨论】: