C# 创建覆盖除特定区域外的整个区域的控件
我想创建一个控件,该控件覆盖除特定区域外的整个区域。该特定区域将为椭圆形/矩形。类似于下面的概念 我的想法是使用路径。下面是我的路径代码C# 创建覆盖除特定区域外的整个区域的控件,c#,xaml,uwp,win-universal-app,C#,Xaml,Uwp,Win Universal App,我想创建一个控件,该控件覆盖除特定区域外的整个区域。该特定区域将为椭圆形/矩形。类似于下面的概念 我的想法是使用路径。下面是我的路径代码 <Path Name="ShowcasePath" StrokeThickness="1" IsHitTestVisible="True"> <Path.Data> <GeometryGroup> <EllipseGeometry RadiusX="100" Radiu
<Path Name="ShowcasePath" StrokeThickness="1" IsHitTestVisible="True">
<Path.Data>
<GeometryGroup>
<EllipseGeometry RadiusX="100" RadiusY="50"/>
<RectangleGeometry/>
</GeometryGroup>
</Path.Data>
</Path>
EllipseGeometry的center
和RectangleGeometry的Rect
将在代码隐藏中设置
这种方法有两个问题
填充颜色是半透明的,即使没有alpha值。最终颜色为透明白色。所以这不是一个真正的问题
椭圆内的项目应为全功能项目,椭圆外的项目应为非功能项目
有没有解决上述问题的办法
或者对该控件有什么不同的想法?您不需要尝试获取“点击”的元素,只需将该元素(在您的情况下是togglebutton)带到前面(基本上高于所有其他元素,以便可以点击)。
您可以通过以下任一方法执行此操作:
更改元素的zindex属性,使其位于前面。
YourElement.SetValue(Canvas.ZIndexProperty,index)代码>
删除该元素并再次将其添加到父网格(因此它基本上是最后一个要添加的元素)
parentGrid.Children.Remove(YourElement);
parentGrid.Children.Add(YourElement);
parentGrid.UpdateLayout()代码>
用户成功与控件交互后,可以将其切换回以前的方式。。希望这能有所帮助。我想你的例子已经非常接近了,至少我没有发现任何错误。如果您尝试以下代码,您将看到它与您描述的完全相同:
但是请记住,即使您将ishitestvisible
设置为false
,用户仍可以使用Tab更改聚焦元素,并使用空格或Return激活元素
“将椭圆聚焦在一个元素上”功能可以很容易地处理如下:
public void焦点元素(FrameworkElement)
{
点中心=新点(element.ActualWidth/2,element.ActualHeight/2);
Point newPosition=元素.TranslatePoint(中心,ShowcasePath);
椭圆梯度法。中心=新位置;
}
启用/禁用所有其他元素功能最好在您的viewmodel中使用,如果您没有,则类似于这样:
private void diablallbutthisanditsparents(FrameworkElement this元素)
{
列表层次结构=FindParents(thisElement).ToList();
foreach(层次结构中的FrameworkElement元素)
{
element.IsEnabled=true;
如果(ReferenceEquals(element,thismelement))继续;
for(int i=0;i
把这些放在一起,它应该是这样的:
那个巨大的红色盒子真的很刺眼@最终的颜色将是透明的白色。我知道这只是一个你想要覆盖的模型,只是很难看到(至少在我的LCD上)。也许更好的选择是绑定所有其他控件的可见性
,以便将除您希望显示的内容以外的所有内容设置为隐藏?@RonBeyer否,所有控件都应通过半透明白色可见。因此,我无法将可见性设置为该属性。绑定所有控件'a(您希望保持活动状态的控件除外)IsEnabled
属性,然后在需要时将其设置为False
。快乐编码:)除突出显示的项目外,应关闭所有项目的交互。另外,我想创建一个自定义控件。我不想弄乱IsEnabled
,因为它会更改look@VijayNirmal当然,您可以使用上述技术的任意组合。ishitestvisible
工作正常。昨天,它没起作用。但我的方法的另一个问题是,椭圆内的每个控件都是难以处理的。假设我有一个按钮1和按钮2彼此靠近,那么即使按钮1高亮显示,我们仍然可以单击按钮2。