我应该如何将多个控件添加到 WPF 窗口? [复制]
Posted
技术标签:
【中文标题】我应该如何将多个控件添加到 WPF 窗口? [复制]【英文标题】:How should I add multiple controls to a WPF window? [duplicate] 【发布时间】:2021-03-29 16:24:38 【问题描述】:免责声明,我对 WPF 比较陌生。
目前,每当我在设计器上放置另一个控件时,所有其他控件都会从 XAML 代码中完全删除。因此,我完全无能为力。
我应该为每个控件制作一个单独的 XAML 文件吗?或者是不是有什么奇怪的事情发生了?
作为参考,这是我当前的 XAML 代码:
<Window x:Class="Lively.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Lively"
mc:Ignorable="d"
Title="Lively" Height="450" Width="662" Foreground="Black" AllowsTransparency="True" WindowStyle="None" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen" Cursor="Arrow" MouseDown="DragWindow">
<Window.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<LinearGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform CenterY="0.5" CenterX="0.5" ScaleY="2"/>
<SkewTransform CenterY="0.5" CenterX="0.5"/>
<RotateTransform Angle="40.601" CenterY="0.5" CenterX="0.5"/>
<TranslateTransform/>
</TransformGroup>
</LinearGradientBrush.RelativeTransform>
<GradientStop Color="Black" Offset="0.033"/>
<GradientStop Color="#FF360606" Offset="1"/>
<GradientStop Color="#FF0F0202"/>
<GradientStop Color="#FF0D0101" Offset="0.248"/>
<GradientStop Color="#FE170202"/>
<GradientStop Color="#FF0B0101" Offset="0.211"/>
<GradientStop Color="#FF080808" Offset="0.256"/>
<GradientStop Color="#FF2E0606" Offset="1"/>
<GradientStop Color="#FF0E0707" Offset="1"/>
<GradientStop Color="#FF010000" Offset="0.274"/>
</LinearGradientBrush>
</Window.Background>
<Window.OpacityMask>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0.207"/>
<GradientStop Color="Black" Offset="0.007"/>
</LinearGradientBrush>
</Window.OpacityMask>
<Image x:Name="Logo" Source="src/Assets/Core/Lively_32x32.png" HorizontalAlignment="Left" Height="39" Margin="619,10,0,0" VerticalAlignment="Top" Width="33" RenderTransformOrigin="0.467,0.5" Stretch="None" ToolTip="Just the logo :)"/>
</Window>
再举个例子,如果我在设计器上放置一个标签,整个<Image>
标记将被删除,就好像它从未存在过一样。
【问题讨论】:
【参考方案1】:是的,Window
元素可以包含单个元素。但是您可以将其设置为像 Grid 这样的容器或任何其他可以将其他元素作为子元素的容器元素。在里面你可以添加任意数量的元素
<Window x:Class="GPRS_Simulator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GPRS_Simulator"
mc:Ignorable="d"
Title="GPRS SIMULATOR" Height="393" Width="708.5" Loaded="winloaded" ResizeMode="NoResize">
<Grid>
<Label .... your label parameters/>
<ComboBox .... your comboBox parameters/>
<Button .... your button parameters/>
... other elements
</Grid>
</Window>
所以代替你的
<Image x:Name="Logo" Source=.../>
你应该使用像我在上面使用的 Grid 这样的容器元素来包含多个元素。
例如。
<Grid>
<Image x:Name="Logo" Source=.../>
<Button x:Name= ...../>
<other elements you want to add ... ... />
</Grid>
【讨论】:
谢谢,我马上试试。不过有一个问题……这是一种好习惯吗?是否可以将多个文件用于高密度窗口?还是我应该留在网格中?这只是我正在制作的启动画面,所以在这里会很好,但我对未来感到好奇。 @wellinthatcase:老实说,我的经验是直接学习编写 XAML 会更好。我希望 Designer 工作得更好,但我发现它使用起来很烦人,而且使用 Designer 表达布局场景可能很困难,这些场景可以直接编写为 XAML。无论您是否使用设计器,您都可以使用UserControl
、模板和单独的资源字典文件来模块化您的 XAML。这与您创作 XAML 本身的方式无关。以上是关于我应该如何将多个控件添加到 WPF 窗口? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在WPF窗口中使用WinRT SwapChainPanel控件?