【发布时间】:2015-06-13 07:25:40
【问题描述】:
我正在尝试设计一个包含一个富文本框和一个复选框的自定义控件。我需要在运行时在堆栈面板中添加此控件。由于堆栈面板的大小可以更改,我想确保自定义控件占用全部空间,并且控件内的文本框的大小相应增加。
我有点困惑,哪个面板最适合这个自定义控件。我应该选择画布还是停靠面板,甚至是网格?
欢迎提出任何建议。
编辑
以下是主页的完整代码。它包含两个部分,一个用于报告预览,另一个用于报告编辑。该报告编辑部分将计算子报告总数并创建那么多部分。因此,报表编辑窗格需要很好地堆叠控件,并上下移动其他控件以适应子报表的扩展。子报表本身的大小可能会有所不同。
Telerik 的 radExpander 起初看起来是个好主意,但主 StackPanel 并没有考虑 radExpander 的可见性状态。现在,即使 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>
【问题讨论】:
-
您尝试过任何方法吗?两个面板都不比另一个更好,这完全取决于您使用该面板所需的上下文。试验一下,看看什么对你有用。
-
我都试过了。两者都有自己的问题。我倾向于画布,但不确定这是否会给我最好的表现。
-
如果您希望控件动态调整大小,我会避免使用 Canvas。您从网格控件开始遇到什么问题?并且要明确一点:您是在创建自定义控件还是用户控件?
-
就我个人而言,在这种情况下我不会使用 Canvas,您能否提供一些代码以便我帮助您进行布局?
-
Canvas 绝对不是这里的答案,因为它没有重新定位和调整大小。该操作表示他想要调整大小,因此可以将画布从列表中排除。