2010-04-09 4 views
0

의 크기에 자식 개체 :WPF 구속 캔버스의 크기 조정 '다음 XAML을 감안할 때 캔버스

<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> 

및 adorners의 집합과 같이로드 된 이벤트의를 RichTextBox에 추가 :

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

RichTextBox의 크기를 Canvas의 가시 범위 이상으로 유지하지 못하게하려면 어떻게해야합니까?

ResizeAdorner는 MSDN adorner 예제에서 찾을 수있는 코드와 기본적으로 동일하며 정상적으로 작동합니다. RichTextBox의 크기를 조정할 수있는 방법을 계산하기 위해 코드 숨김에서 MaxWidth 및 MaxHeight의 바인딩을 사용하여 작업해야합니까? 또는 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에서 명명 된 캔버스를했습니다, 당신은 오히려 당신은 그냥 사용할 수 있습니다하는 찾기 조상 바인딩을 필요로하지 않기 때문에 코드에서

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

당신의 결합, 즉의 경우 ElementName,

가 뒤에 AdornerLayer 0에서 컨트롤의 초기 위치를 변경,

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

예, 즉 캔버스가 아닌하여 RichTextBox,해야한다, 캔바에 0 개 캔버스의 가장자리를 지나치게 오른쪽과 아래쪽으로 드래그를 고정시킵니다. 내가 겪고있는 문제와 원래 질문에서 언급하지 못한 것은 왼쪽과 위로 크기를 조정하고있었습니다. 내가 어떻게 초기 질문에 그것을 넣지 않았는지 모르지만 나는하지 않았다. 그것은 비난 할 방향으로 내 크기 조정 코드였습니다. XAML 바인딩에 대한 정보를 제공해 주셔서 감사합니다. – Scott