用于创建自定义控件的最佳 WPF 面板
本文关键字:WPF 面板 最佳 创建 自定义控件 用于 | 更新日期: 2023-09-27 17:55:46
我正在尝试设计一个包含富文本框和一个复选框的自定义控件。我需要在运行时在堆栈面板中添加此控件。由于堆栈面板的大小可以更改,因此我想确保自定义控件占用全部空间,并且控件内的文本框的大小也会相应增加。
对于哪个面板是此自定义控件的最佳选择,我感到有些困惑。我应该选择画布还是基座面板,甚至是网格?
欢迎任何建议。
编辑
以下是主页的完整代码。它包含两个部分,一个用于报表预览,另一个用于报表编辑。该报表编辑部分将计算子报表总数并创建许多部分。因此,报表编辑窗格需要很好地堆叠控件,并上下移动其他控件以适应子报表的展开。子报表本身的大小可能有所不同。
Telerik的radExpander起初看起来像个好主意,但主要的StackPanel并没有考虑radExpander的可见性状态。目前,StackPanel 使用全高,即使辐射扩展器最小化。
<ScrollViewer Grid.Row="1" Panel.ZIndex="5">
<Grid x:Name="MainArea" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<StackPanel CanVerticallyScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto">
<telerik:RadExpander x:Name="ReportSection" Height="120" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="Trebuchet MS" Foreground="#FF0081A7" Header="Report Section Name" BorderBrush="#FF0081A7" BorderThickness="1">
<telerik:RadExpander.Content>
<StackPanel>
<CheckBox x:Name="AddToReport" Content="ADD TO REPORT" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="30" VerticalContentAlignment="Center" BorderBrush="#FF0081A7" Foreground="#FF0081A7" IsChecked="True" FontFamily="Trebuchet MS" />
<telerik:RadRichTextBox x:Name="radRichTextBox" DocumentInheritsDefaultStyleSettings="True" Height="auto" HorizontalScrollBarVisibility="Hidden" IsSelectionMiniToolBarEnabled="True" IsSpellCheckingEnabled="True" IsContextMenuEnabled="True" Margin="10" VerticalScrollBarVisibility="Auto" Width="Auto"/>
</StackPanel>
</telerik:RadExpander.Content>
</telerik:RadExpander>
<telerik:RadExpander x:Name="ReportSection2" Height="120" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="Trebuchet MS" Foreground="#FF0081A7" Header="Report Section Name" BorderBrush="#FF0081A7" BorderThickness="1" VerticalContentAlignment="Top" HorizontalContentAlignment="Left" RenderTransformOrigin="0.493,0.856">
<telerik:RadExpander.Content>
<StackPanel>
<CheckBox x:Name="AddToReport2" Content="ADD TO REPORT" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="30" VerticalContentAlignment="Center" BorderBrush="#FF0081A7" Foreground="#FF0081A7" IsChecked="True" FontFamily="Trebuchet MS" />
<telerik:RadRichTextBox x:Name="radRichTextBox2" DocumentInheritsDefaultStyleSettings="True" Height="auto" HorizontalScrollBarVisibility="Hidden" IsSelectionMiniToolBarEnabled="True" IsSpellCheckingEnabled="True" IsContextMenuEnabled="True" Margin="10" VerticalScrollBarVisibility="Auto" Width="Auto"/>
</StackPanel>
</telerik:RadExpander.Content>
</telerik:RadExpander>
<telerik:RadExpander x:Name="ReportSection3" Height="120" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="Trebuchet MS" Foreground="#FF0081A7" Header="Report Section Name" BorderBrush="#FF0081A7" BorderThickness="1">
<telerik:RadExpander.Content>
<StackPanel>
<CheckBox x:Name="AddToReport3" Content="ADD TO REPORT" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="30" VerticalContentAlignment="Center" BorderBrush="#FF0081A7" Foreground="#FF0081A7" IsChecked="True" FontFamily="Trebuchet MS" />
<telerik:RadRichTextBox x:Name="radRichTextBox3" DocumentInheritsDefaultStyleSettings="True" Height="auto" HorizontalScrollBarVisibility="Hidden" IsSelectionMiniToolBarEnabled="True" IsSpellCheckingEnabled="True" IsContextMenuEnabled="True" Margin="10" VerticalScrollBarVisibility="Auto" Width="Auto"/>
</StackPanel>
</telerik:RadExpander.Content>
</telerik:RadExpander>
<telerik:RadExpander x:Name="ReportSection4" Height="120" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="Trebuchet MS" Foreground="#FF0081A7" Header="Report Section Name" BorderBrush="#FF0081A7" BorderThickness="1">
<telerik:RadExpander.Content>
<StackPanel>
<CheckBox x:Name="AddToReport4" Content="ADD TO REPORT" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="30" VerticalContentAlignment="Center" BorderBrush="#FF0081A7" Foreground="#FF0081A7" IsChecked="True" FontFamily="Trebuchet MS" />
<telerik:RadRichTextBox x:Name="radRichTextBox4" DocumentInheritsDefaultStyleSettings="True" Height="auto" HorizontalScrollBarVisibility="Hidden" IsSelectionMiniToolBarEnabled="True" IsSpellCheckingEnabled="True" IsContextMenuEnabled="True" Margin="10" VerticalScrollBarVisibility="Auto" Width="Auto"/>
</StackPanel>
</telerik:RadExpander.Content>
</telerik:RadExpander>
</StackPanel>
</Grid>
</ScrollViewer>
编辑
前回答根据您的解释,您只能从列表中排除画布。其他控件具有调整其中子控件的大小和重新定位功能。甚至可以通过配置一个面板(例如网格)来具有相同的行为,以具有与另一个面板(如停靠面板)相同的效果。网格面板可能是最通用的,但即便如此,每个面板都有其用途。这个想法应该是为作业使用正确的面板,以便 xaml 的数量受到限制且可读。
有关容器的更多信息可以在这里找到:http://www.wpf-tutorial.com/panels/introduction-to-wpf-panels/
您没有针对某个定位给出具体问题,因此答案也只能触及表面。但是,如果您通过谷歌搜索WPF面板和布局,并花一些时间阅读材料并进行一些练习,我相信您会在几个小时内理解它们。