在我的WPF窗口中,我有一个状态栏和一个TextBox。现在,我想要实现的是在我的代码,我有一个按钮,折叠和显示状态栏。当我单击该按钮时,状态栏会折叠,因此控件将为collapsed,不再显示,因此文本框将填充状态栏的空间。当再次按下按钮时,状态栏将是visible,并将文本框向上推。
我只试过这个,但没成功。THe问题是状态栏将隐藏,但文本框仍然位于相同的位置,不会占用空间。请有人帮我,这将是非常感谢。
<StackPanel>
<Grid>
<StatusBar Height="30" VerticalAlignment="Bottom">
<StatusBarItem Content="Last Saved Not Saved"/>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<StatusBarItem Content="Character 0 Word 0"/>
<StatusBarItem Content="Ln 1, Ch 0"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
<TextBox x:Name="textBox" Height="380" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Margin="0,24,0,0"/>
</Grid>
</StackPanel>发布于 2014-12-17 13:14:12
正如我们前面所说的,为了实现TextBox拉伸的功能,您可以使用DockPanel,如下所示:
<DockPanel MinHeight="380" LastChildFill="True">
<StatusBar DockPanel.Dock="Top" Height="30"/>
<TextBox DockPanel.Dock="Bottom"/>
</DockPanel>还有其他的方法,比如使用Grid.RowsDefinitions,但是为了这段对话,让我们继续使用DockPanel。
编码愉快。
发布于 2014-12-17 12:26:39
我相信你想要的是:
可以绑定到ToggleButton上的ToggleButton属性,通过使用转换器,将IsChecked布尔值转换为可见性,下面是转换器类:
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool val = (bool)value;
return val ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}这是XAML:
<Window x:Class="test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:YourNamespace="clr-namespace:YourNamespace"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<YourNamespace:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<Grid>
<StackPanel>
<ToggleButton Name="toggle" Width="100" Height="24" Content="Toggle It"/>
<StatusBar Height="30" VerticalAlignment="Bottom"
Visibility="{Binding ElementName=toggle, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}">
<StatusBarItem Content="Last Saved Not Saved"/>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<StatusBarItem Content="Character 0 Word 0"/>
<StatusBarItem Content="Ln 1, Ch 0"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
<TextBox x:Name="textBox" Height="380" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Margin="0,24,0,0"/>
</StackPanel>
</Grid>
我建议在换流器上阅读一下。
发布于 2014-12-17 12:56:36
检查一下这个:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition x:Name="rowHeight" Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ToggleButton Name="toggle" Width="100" Height="24" Content="Toggle It"/>
<TextBox x:Name="textBox" TextWrapping="Wrap" Text="TextBox" Grid.Row="1" Grid.RowSpan="{Binding ElementName=toggle, Path=IsChecked, Converter={StaticResource GridSpanConverter}}"/>
<StatusBar Height="30" VerticalAlignment="Bottom" Grid.Row="2"
Visibility="{Binding ElementName=toggle, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}">
<StatusBarItem Content="Last Saved Not Saved"/>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<StatusBarItem Content="Character 0 Word 0"/>
<StatusBarItem Content="Ln 1, Ch 0"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
</Grid>您需要如下所示的转换器:
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<local:GridSpanConverter x:Key="GridSpanConverter"/>GridSpanConverter代码:
public class GridSpanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool && (bool)value == true)
return 1;
return 2;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}在这里,您必须使用您的命名空间在窗口中添加本地程序集引用。
https://stackoverflow.com/questions/27525374
复制相似问题