我想在点击这个控件的时候给这个控件一个虚线边框,点击Canvas其他空白地方的时候取消掉这个边框该怎么做
时间: 2024-03-05 22:54:38 浏览: 125
要在点击控件时给它添加一个虚线边框,可以在 CustomFont_MouseLeftButtonDown 事件处理程序中添加以下代码:
```csharp
private void CustomFont_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 将控件的边框设置为虚线边框
((Control)sender).BorderBrush = new SolidColorBrush(Colors.Black);
((Control)sender).BorderThickness = new Thickness(1);
((Control)sender).BorderStyle = DashStyle.Dot;
}
```
要在点击空白区域时取消掉边框,可以在 Canvas 的 PreviewMouseDown 事件处理程序中添加以下代码:
```csharp
private void Canvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
// 判断是否点击了 CustomFont 控件以外的区域
if (!IsMouseOverCustomFont(e.OriginalSource as DependencyObject))
{
// 取消控件的边框
foreach (var child in canvas.Children)
{
if (child is Control control)
{
control.BorderThickness = new Thickness(0);
}
}
}
}
// 判断鼠标点击的元素是否是 CustomFont 控件或其子元素
private bool IsMouseOverCustomFont(DependencyObject element)
{
if (element == null)
{
return false;
}
else if (element is CustomFont)
{
return true;
}
else
{
return IsMouseOverCustomFont(VisualTreeHelper.GetParent(element));
}
}
```
这样,当用户点击 CustomFont 控件时,控件会出现虚线边框;当用户点击其他空白区域时,所有 CustomFont 控件的边框都会被取消。
阅读全文