我正在尝试将我的WPF应用程序转换为WPF UserControl。在原始应用程序中,我故意修改了某些元素的边距,使它们的边缘不在窗口的范围内。我这样做是为了隐藏不受欢迎的边框,这些边框是我无法编写的,无需编写自己的控件模板。这是一个简单的修复,但遗憾的是,当我的应用程序变成UserControl时,这种技术无效。如果我将UserControl的宽度设置为与原始应用程序中的窗口相同的宽度,当我在测试应用程序中查看此UserControl时,我想要隐藏其边框的元素现在完全可见。
对我来说,为什么会发生这种情况是没有意义的。如果我将UserControl的宽度设置为某个WIDTH,那么UserControl的宽度应该等于WIDTH,对吧?好吧,正如你在下面的图1中看到的那样,无论我设置WIDTH是什么,UserControl的所有元素都是完全可见的。所需的视觉效果(我以前在原始应用中得到的视觉效果)如图2所示,其中元素被窗口的边界正确切除。
My Problem http://img715.imageshack.us/img715/1807/probleme.png
如何确保带有负边距的元素将在UserControl中显示我希望它们的方式?任何帮助实现这一点将不胜感激。
非常感谢你,
达拉尔
答案 0 :(得分:4)
您是否尝试将UserControl中元素的ClipToBounds
属性设置为True
?
答案 1 :(得分:0)
在用户控件中,将容器的Clip
属性(例如Grid
)设置为用户控件的大小(宽度,高度)。
例如,
<Window x:Class="TestClipping.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="Auto" Width="Auto">
<Grid SizeChanged="OnGridSizeChanged"
x:Name="myGrid">
</Grid>
</Window>
和事件处理程序:
private void OnGridSizeChanged(object sender, SizeChangedEventArgs e)
{
// Set the clipping region to match the current display region of the grid.
var visibleArea = new RectangleGeometry();
visibleArea.Rect = new Rect(0, 0,
myGrid.ActualWidth, myGrid.ActualHeight);
myGrid.Clip = visibleArea;
}