0

我正在尝试使用 C#/WPF 创建自定义控件。请参阅下面的控件的 XAML,以及我尝试将其放入的窗口。

问题:当我将 Horizo​​ntalAlignment 或垂直对齐属性设置为 Center 时,控件的左上角居中,但向下和向右延伸。设计器中显示的控件边界框非常小(我认为零宽度/高度)。

似乎我的控件在布局执行操作时没有正确报告其大小有问题。此外,调整高度和宽度时,它似乎没有调整大小。我在代码隐藏(尚未)中没有任何内容可以改变控件的外观(例如,没有测量覆盖)。

这是我第一次尝试自定义控件 - 可能是更好的方法(想到 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

这是 a 的行为Canvas。这是MSDN不得不说的:

Canvas 是唯一没有固有布局特征的面板元素。Canvas 的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有尺寸约束或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。

如果您想调整 UserControl 的大小,请将其包裹在 a 周围并将 a和Viewbox设置为.HeightWidthCanvas

于 2012-05-30T18:20:28.013 回答