2010-04-09 127 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