2012-05-30 4 views
0

C#/WPF를 사용하여 사용자 지정 컨트롤을 만들려고합니다. 내 컨트롤의 XAML 및 그 안에 넣으려고하는 창은 아래를 참조하십시오.사용자 지정 컨트롤 크기 조정/배치 문제

문제 : HorizontalAlignment 또는 Vertical alignment 속성을 가운데로 설정하면 컨트롤의 왼쪽 위 모퉁이가 가운데에 배치되지만 아래로 오른쪽으로 확장됩니다. 디자이너에 표시되는 컨트롤의 경계 상자는 매우 작습니다 (너비가 0 인 것 같습니다).

레이아웃이 그 일을 할 때 크기가 제대로보고되지 않는 문제가있는 것 같습니다. 또한 높이와 너비가 조정될 때 크기가 조정되지 않는 것처럼 보입니다. 컨트롤의 모양을 변경하는 코드 숨김 (아직)에 아무 것도 없습니다 (예 : 재정의 없음).

이것은 사용자 지정 컨트롤에 대한 나의 첫 번째 시도입니다. 아마도 더 좋은 방법 일 것입니다. (TextBlock이 마음에 듭니다.)하지만이 방법을 배웠습니다! :

<UserControl x:Class="LCD.LiquidCrystalDisplay" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignWidth="300" d:DesignHeight="122"> 
    <Canvas> 

     <Rectangle Fill="#FFD1D1D1" Width="300" Height="122" /> 
     <Rectangle Fill="#FF345534" Margin="12,8,12,8" Width="276" Height="106" /> 
     <Rectangle Fill="#FF293E29" Margin="15,11,15,11" Width="270" Height="100" /> 

     <Line X1="32" X2="32" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="50" X2="50" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="67" X2="67" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="84" X2="84" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="101" X2="101" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="117" X2="117" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="134" X2="134" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="151" X2="151" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="168" X2="168" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="184" X2="184" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="201" X2="201" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="218" X2="218" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="235" X2="235" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="251" X2="251" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="268" X2="268" Y2="111" Y1="11" StrokeThickness="1" Stroke="#FF345534" /> 

     <Line X1="15" X2="285" Y1="36" Y2="36" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="15" X2="285" Y1="61" Y2="61" StrokeThickness="1" Stroke="#FF345534" /> 
     <Line X1="15" X2="285" Y1="86" Y2="86" StrokeThickness="1" Stroke="#FF345534" /> 

    </Canvas> 
</UserControl> 

을 그리고 XAML은 창에 포함 : D

XAML 내 컨트롤을 정의

<Window x:Class="TestJunk.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:my="clr-namespace:LCD;assembly=LCD" 
     Title="MainWindow" Height="341" Width="544"> 
    <Grid Name="MainGrid"> 
     <my:LiquidCrystalDisplay Name="lcd" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
    </Grid> 
</Window> 
+0

또한이 컨트롤을 눈금에 배치하고 격자의 행 또는 열 정의의 높이 또는 너비를 자동으로 설정하면 마치 컨트롤의 높이와 너비가 0 인 것처럼 나타납니다. 그리드의 행/열은 아무것도 축소되지 않습니다. – Steve

답변

1

이것은 Canvas의 동작입니다. 여기 MSDN 말을하는 것입니다 :

캔버스에는 고유의 레이아웃을 특성이없는 유일한 패널 요소입니다. Canvas의 기본 높이 및 너비 속성은 이며, 해당 요소가 자식 요소 인 경우 자동으로 크기를 조절하는 요소의 자식 인 경우가 아니면 입니다. 캔버스의 자식 요소는 절대 크기가 조절되지 않으며, 은 지정된 좌표에 배치됩니다. 이는 고유 한 크기 제한 또는 정렬이 필요하지 않거나 필요하지 않은 상황에 대해 유연성을 제공합니다. 자식 콘텐츠의 크기를 자동으로 조정하고 정렬하려는 경우 일반적으로 Grid 요소를 사용하는 것이 가장 좋습니다.

당신은 UserControl을 크기 조절을 가지고 Viewbox 주위를 감싸고 CanvasHeightWidth을 설정합니다.

+0

아, 고마워! 수락 됨 :) – Steve