我正在尝试模仿Windows 7中的Sticky Notes应用程序。在原始应用程序中,如果您在粘滞便笺中键入文本并且文本变得太大(垂直,如行数)以适合窗口,窗口自动垂直扩展,一次一行,以留出更多空间。换句话说,在普通文本框中会出现一个垂直滚动条,文本会向下滚动(这样第一行变得不可见),在粘滞便笺中,文本框的扩展范围足以适合文本,因此不会出现滚动条。当然,当您手动调整窗口大小时,滚动条仍然会出现。
如果你有Windows 7,只需打开Sticky Notes应用程序,然后在便利贴中输入几行直到它放大。
我试图模仿这种效果,但我没有运气。问题似乎是实际的窗口应该调整大小,而不仅仅是文本框(我不认为WPF以这种方式工作,子元素的大小调整可以'强制'父元素变大?至少不适用于Window,右?)。
此时窗口的内容如下:
<Window Background="Transparent" BorderBrush="Transparent">
<!-- Transparent border to draw dropshadow on -->
<Border Background="Transparent" BorderBrush="Transparent">
<!-- Grid with UI elements -->
<Grid Margin="5" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="27" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Stickynote header -->
<Border ... />
<!-- Content -->
<Border Grid.Row="1">
<TextBox Text="{Binding ContentText}" ... />
</Border>
</Grid>
</Border>
</Window>
有人知道我怎么能达到这个效果吗?谢谢!
答案 0 :(得分:2)
尝试使用窗口属性SizeToContent="Height"
示例
<Window ...
MaxHeight="500"
SizeToContent="Height">
<Border Background="Transparent" BorderBrush="Transparent">
<Grid Margin="5" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="27" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="1">
<TextBox AcceptsReturn="True" MinHeight="100"/>
</Border>
</Grid>
</Border>
</Window>
修改强>
要将其与您发布的TransparentWindow
一起使用,请在transparentWindow.SizeToContent = SizeToContent.Manual
中添加OnDragDelta
(TransparentWindow.cs)
private static void OnDragDelta(object sender, DragDeltaEventArgs e)
{
TransparentWindow transparentWindow = (TransparentWindow)sender;
Thumb thumb = e.OriginalSource as Thumb;
transparentWindow.SizeToContent = SizeToContent.Manual;
if (thumb != null && transparentWindow.WindowState == WindowState.Normal)
{
//...
}
}