2010-04-09 95 views
0

考虑下面的XAML的尺寸:WPF约束画布的大小调整子对象到画布

<Window x:Class="AdornerTesting.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="500" Width="500" 
     Loaded="Window_Loaded"> 
    <Grid Name="grid"> 
     <Canvas Name="canvas" Width="400" Height="400" Background="LightGoldenrodYellow"> 
      <RichTextBox Name="richTextBox" Canvas.Top="10" Canvas.Left="10" BorderBrush="Black" BorderThickness="2" 
        Width="200" 
        Height="200" 
        MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}},Path=ActualWidth}" 
        MaxHeight="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}},Path=ActualHeight}"/> 
     </Canvas> 
    </Grid> 
</Window> 

和一组装饰​​器被添加到RichTextBox中的Loaded事件,像这样:

AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(richTextBox); 
adornerLayer.Add(new ResizeAdorner(richTextBox)); 

我该如何防止在Canvas的可见范围之外调整RichTextBox的大小?

ResizeAdorner本质上是可以在MSDN adorner示例中找到的相同的代码,它工作得很好。我是否应该在代码隐藏中使用MaxWidth和MaxHeight的绑定来计算RichTextBox的可调整大小?或者有没有办法在XAML中做到这一点?

回答

2

如果您指的是ResizingAdorner Sample on MSDN,那么您发布的代码在技术上是正确的,因为RichTextBox不会比您的画布大。

您可能会看到的是,当您调整富文本框的大小时,底部和右侧将延伸超过画布边界10个像素。这是因为您发布的XAML表示富文本框的MaxHeight和MaxWidth将是画布的高度/宽度。

富文本框超出画布10个像素的原因是富文本框位于画布的Canvas.Top =“10”和Canvas.Left =“10”位置。

如果将富文本框设置为Canvas.Top =“0”Canvas.Left =“0”,则会看到富文本框永远不会超出画布边界。

一对夫妇对XAML和代码背后的笔记...

既然你已经在你的XAML命名的画布,你并不需要用查找祖先的绑定,而你可以只使用的ElementName在你的绑定,即

<RichTextBox ... 
    MaxWidth="{Binding ElementName=canvas,Path=ActualWidth}" 
    MaxHeight="{Binding ElementName=canvas,Path=ActualHeight}"/> 

在后面的代码中,AdornerLayer应该是你的画布,而不是RichTextBox的,即

AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(canvas); 
adornerLayer.Add(new ResizeAdorner(richTextBox)); 
+0

是,在0改变控制的初始位置, 0在canva上s会将拖动向右和向下拖到画布的边缘。我当时遇到的问题以及我原来的问题中没有提到的,就是左右调整大小。不知道我怎么没有把这个问题放在最初的问题上,但我没有。事实证明,这是我在那些被责怪的方向调整大小的代码。感谢XAML绑定的提示,绑定的东西有时会抛出我。 – Scott 2010-04-15 17:07:13