0

C#/WPF でカスタム コントロールを作成しようとしています。コントロールの XAML と、それを入れようとしているウィンドウについては、以下を参照してください。

問題: Horizo​​ntalAlignment または垂直方向の配置プロパティを Center に設定すると、コントロールの左上隅が中央に配置されますが、右下に伸びます。デザイナーに表示されるコントロールのバウンディング ボックスは非常に小さいです (ゼロ幅/高さだと思います)。

レイアウトが機能しているときに、コントロールがサイズを適切に報告しないという問題があるようです。また、Height と Width を調整してもリサイズされないようです。コントロールの外観を変更するコード ビハインドには (まだ) 何もありません (たとえば、メジャー オーバーライドはありません)。

これはカスタム コントロールでの私の最初の試みです。おそらくより良い方法です (TextBlock が頭に浮かびます)。しかし、これが私が学ぶ方法です! :D

私のコントロールを定義する XAML:

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

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

1 に答える 1

1

これは の動作ですCanvasMSDNのコメントは次のとおりです。

キャンバスは、固有のレイアウト特性を持たない唯一のパネル要素です。子要素のサイズを自動的に変更する要素の子でない限り、Canvas のデフォルトの Height プロパティと Width プロパティはゼロです。Canvas の子要素はサイズ変更されることはなく、指定された座標に配置されるだけです。これにより、固有のサイズ制約や位置合わせが不要または不要な状況に柔軟に対応できます。子コンテンツを自動的にサイズ変更して配置する場合は、通常、Grid 要素を使用するのが最適です。

UserControl のサイズを変更する場合は、a をラップして、aとViewboxを に設定します。HeightWidthCanvas

于 2012-05-30T18:20:28.013 に答える