标签: gridsplitter

MouseOver上的Gridsplitter visibile

我希望GridSplitter只有当用户将鼠标放在它上面时才能看到它.为此我正在设计DataTrigger它的风格.但我无法弄清楚它是什么错,因为我没有得到理想的行为.它保持不变.

                <GridSplitter
            ResizeDirection="Columns"
            ResizeBehavior="BasedOnAlignment"
            Grid.Column="1"
            Grid.Row="0"
            Grid.RowSpan="2"
            Width="8"
            Height="Auto"
            HorizontalAlignment="Left"
            VerticalAlignment="Stretch" 
                Background="AliceBlue"
            Margin="-3 0 0 0">
                <GridSplitter.Style>
                    <Style TargetType="{x:Type GridSplitter}">
                        <Setter Property="Visibility" Value="Hidden"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsMouseOver}">
                                <Setter Property="Visibility" Value="Visible"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </GridSplitter.Style>
            </GridSplitter>
Run Code Online (Sandbox Code Playgroud)

你看错了吗?是否GridSplitter必须以不同的方式来称呼?

c# wpf gridsplitter

6
推荐指数
1
解决办法
1121
查看次数

将可调整大小的Expander从右向左扩展

我想从下面的问题中找到扩展器(参见接受的答案),这对我来说是一个完美的解决方案.我只想把它放在右边.

结合扩展器和网格(可调整大小的扩展器)

为了让它从右向左扩展,我改变了类似行为的设置.(我强调了能够更好地了解正在发生的事情的因素):

<Expander Grid.Column="1" Header="Test" ExpandDirection="Left" 
        BorderThickness="10" BorderBrush="Black" HorizontalAlignment="Right" >
  <Expander.Content>
    <Grid >
       <Grid.ColumnDefinitions>
         <ColumnDefinition Width="Auto"/>
         <ColumnDefinition Width="Auto" />
       </Grid.ColumnDefinitions>
       <GridSplitter Grid.Column="0" Width="10" Background="Green" 
                  ResizeDirection="Columns" ResizeBehavior="CurrentAndNext" />
       <TextBox Grid.Column="1" Text="Lorem ipsum dolor sit" 
             BorderThickness="10" BorderBrush="Red"/>
    </Grid>
  </Expander.Content>
</Expander>
Run Code Online (Sandbox Code Playgroud)

当我将分离器向右移动时,它会调整分离器左侧区域的大小.我尝试了很多其他组合,但它几乎导致了相同的不良行为.分离器左侧区域有时会发生奇怪的爆炸,但TextBox保持不变.

wpf grid xaml expander gridsplitter

5
推荐指数
1
解决办法
6048
查看次数

GridSplitter MinWidth,大小固定

我有一个2列的网格,由GridSplitter使用以下XAML代码分隔:

<Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="100" MinWidth="20" />
    <ColumnDefinition Width="10" />
    <ColumnDefinition Width="*" MinWidth="100" />
    </Grid.ColumnDefinitions>

    <Rectangle Fill="Blue" />
    <GridSplitter Grid.Column="1" Background="LightGray" HorizontalAlignment="Stretch" />
    <Rectangle Fill="Yellow" Grid.Column="2" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

问题:忽略右侧列的MinWidth

  • 当页面加载时,我肯定需要将第一列宽度设置为"100px",因此它不能是*大小.
  • 我不想在第一列上设置MaxWidth

*我知道之前已经解决了,但它始终建议将列大小设置为*或在第一列设置maxWidth ...我不希望这样.


找到了解决方案,但它的UGLY!:p,任何人都有更清洁的方式来实现我想要的...... CODELESS(如果可能的话)?

private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
   var g = (Grid)sender;

   Double maxW = e.NewSize.Width - g.ColumnDefinitions[2].MinWidth - g.ColumnDefinitions[1].ActualWidth;
   g.ColumnDefinitions[0].MaxWidth = maxW;
}
Run Code Online (Sandbox Code Playgroud)

silverlight wpf xaml silverlight-toolkit gridsplitter

5
推荐指数
1
解决办法
6988
查看次数

wpf gridsplitter问题 - 双方缩小

Gridsplitter麻烦:

我有一个:4列的网格

  • 第0列包含一个包含3列的网格
  • 第1列包含一个网格分析器
  • 第2列包含宽度为20像素的堆叠面板
  • 第3列包含一个包含3列的网格

当栅格切割器向左或向右移动时,两个面板收缩相同的量 - 一个应缩小,另一个应该增长.

我对包含xaml犹豫不决,但你会要求它,所以这里是一个删节版本.我只删除了一些不相关的控件,并删除了treeviews和listviews.如果你真的需要整件事,那我当然可以提供它.

谢谢你的帮助!

<Window x:Class="Calvin.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"
        Title="Calvin" >
    <DockPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LastChildFill="True" >
        <Grid DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.497" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*" />
                <ColumnDefinition Width="5"  />
                <ColumnDefinition Width="20"  />
                <ColumnDefinition Width="1*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="5" />
                    <ColumnDefinition Width="2*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"  TextWrapping="NoWrap" Text="Field …
Run Code Online (Sandbox Code Playgroud)

wpf xaml gridsplitter

5
推荐指数
2
解决办法
2892
查看次数

使用 Gridsplitter-Functionality 排列项目的 Itemscontrol

我需要一个水平或垂直堆叠项目的布局。每个项目应该由一个拆分器分隔,因此用户可以更改大小(如 VisualStudio 中的工具箱容器)项目来自模型,所以我需要一个 ItemsControl,我可以在其中设置 ItemsSource。

我的第一个想法是构建一个从 Grid 派生的 CustomControl。他们的我使用“OnVisualChildrenChanged”方法在添加新项目时做出反应。然后我想添加新的 Column-/Rowdefinitions(取决于它应该是水平的还是垂直的)。但这是第一个问题。当网格设置为 IsItemsHost="true" 时,我收到一个错误,说明 DefinitionsCollection 不可访问...

这是自定义控件中的 CodeSnipped,我尝试在其中添加一行。

 private void SetRows()
    {
       this.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto };             
    }

    protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
    {
        base.OnVisualChildrenChanged(visualAdded, visualRemoved);
        SetRows();            
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

我想我现在找到了解决方案。

首先,我创建了一个派生自 ItemsControl 的 CustomControl。在他的模板中,我添加了一个网格而不插入一个 Itempresenter。现在我覆盖 OnItemsChange。当一个项目被添加到集合中时,我创建一个 FrameworkElement 并将 DataContext 设置为添加的项目,然后我将两个列定义添加到网格并将我的项目和一个 Gridsplitter 添加到网格。这很有效,现在我只需要从我的 Itemscontrol 中获取 ItemTemplate 即可在网格中使用它。

当我解决了最后一个问题时,我将添加一个小例子。

wpf grid layout itemscontrol gridsplitter

5
推荐指数
1
解决办法
1964
查看次数

如何将GridSplitter设置为特定的初始位置?

GridSplitter在我的WPF应用程序中使用了一个,并希望从代码中将其设置为特定的初始位置.我一直坚持GridSplitter将特定值设置为Height关联属性时的行为RowDefinition.

这是我举例说明这个问题.我已添加TextBlocks以显示RowDefinition.Height属性的实际值.

XAML代码:

  <Grid>
        <Grid.RowDefinitions>
            <RowDefinition x:Name="RowDef1" Height="*" MinHeight="20"/>
            <RowDefinition Height="Auto" />
            <RowDefinition x:Name="RowDef2" Height="*" MinHeight="20"/>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0" LastChildFill="True" >
            <TextBlock FontSize="16" VerticalAlignment="Top"  Text="Upside Height: "/>
            <TextBlock x:Name="Tbl1" FontSize="16" Text="{Binding Height}"/>
        </DockPanel>
        <GridSplitter Grid.Row="1" Height="10" HorizontalAlignment="Stretch" ResizeBehavior="PreviousAndNext" Background="Black" />
        <DockPanel Grid.Row="2" LastChildFill="True" >
            <TextBlock FontSize="16" VerticalAlignment="Top" Text="Downside Height: "/>
            <TextBlock x:Name="Tbl2" FontSize="16" Text="{Binding Height}"/>
        </DockPanel>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

namespace WpfGridSplitterTest
{
    public partial class MainWindow : Window
    { …
Run Code Online (Sandbox Code Playgroud)

wpf gridsplitter

5
推荐指数
1
解决办法
4264
查看次数

为什么我的GridSplitter不出现?

我有一个简单的Window看起来像这样:

<Window x:Class="StackOverflowExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="3*" />
            <RowDefinition Height="2*" />
        </Grid.RowDefinitions>

        <Label Content="Foo" Margin="5" />
        <Label Grid.Row="1" Content="Bar" Margin="5" />
        <GridSplitter Grid.Row="1" Background="Black" VerticalAlignment="Top" Height="5" />
    </Grid>
</Window>

// The code-behind is empty, except for "InitializeComponent()".
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,没有GridSplitter可见的.GridSplitter在设计时我也看不到.

  • 我确保它GridSplitter在正确的行中,然后设置VerticalAlignmentTop
  • 我已经指定了一个明确的背景颜色,以确保GridSplitter不混入.
  • 我已经确定它GridSplitter是最后一个元素Grid,所以我不应该ZIndex遇到问题.
  • 为了以防万一,我已经为标签添加了边距,以确保它们不会遮挡网格(尽管这在这种情况下应该有所不同).

我究竟做错了什么?

.net c# wpf grid gridsplitter

4
推荐指数
1
解决办法
449
查看次数

隐藏WPF网格列时的Gridsplitter行为

我是WPF的新手,所以请原谅我,如果这是"旧帽子"这些天......已经在网上/论坛上搜索过,并且找不到我需要的答案:

我有一个包含5列的WPF网格 - 三个用于数据,两个用于网格分割器,这(感谢此网站上的信息!)似乎可以正常工作并调整大小.但是 - 我需要能够显示/隐藏中间列.我可以这样做,但是当我隐藏中间列时,左手网格探测器仍会影响"隐藏"列 - 我需要有效地在2和3列之间切换.这是我的(原型)代码:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Name="Col0" Width="*" />
        <ColumnDefinition Name="Col1" Width="auto" />
        <ColumnDefinition Name="Col2" Width="*" />
        <ColumnDefinition Name="Col3" Width="auto" />
        <ColumnDefinition Name="Col4" Width="auto" />
    </Grid.ColumnDefinitions>
    <GridSplitter Grid.Column="1" Height="100" HorizontalAlignment="Center" Margin="0" Name="GridSplitter1" VerticalAlignment="Stretch" Width="3" />
    <GridSplitter Grid.Column="3" Height="100" HorizontalAlignment="Center" Margin="0" Name="GridSplitter2" VerticalAlignment="Stretch" Width="3" />
    <Border BorderBrush="Silver" BorderThickness="1" Grid.Column="0" HorizontalAlignment="Stretch" Margin="0" Name="Border1" VerticalAlignment="Stretch" Background="#FFC84797" />
    <Border BorderBrush="Silver" BorderThickness="1" Grid.Column="2" HorizontalAlignment="Stretch" Margin="0" Name="Border2" VerticalAlignment="Stretch" Background="Black" />
    <Border BorderBrush="Silver" BorderThickness="1" Grid.Column="4" HorizontalAlignment="Stretch" Margin="0" Name="Border3" VerticalAlignment="Stretch" Background="#FFA60000">
        <Button Content="hide" …
Run Code Online (Sandbox Code Playgroud)

wpf visibility gridsplitter

4
推荐指数
1
解决办法
3721
查看次数

在 XAML(带边框)中聚焦/拖动时如何更改 GridSplitter 的背景?

我发现没有像“DragBackground”之类的 GridSplitter 属性很奇怪。

不过,这似乎有效:

<UserControl.Resources>
    <Style x:Key="CustomGridSplitterStyle" TargetType="GridSplitter">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GridSplitter">
                    <Grid x:Name="Root" >
                        <!-- Background -->
                        <Rectangle Fill="White" StrokeThickness="0" />
                        <!-- Focus Visual -->
                        <Rectangle x:Name="FocusVisual" Stroke="White" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

 

  GridSplitter Style="{StaticResource CustomGridSplitterStyle}" Grid.Column="1" Width="6" HorizontalAlignment="Stretch" 
                  BorderThickness="2,0,0,0" BorderBrush="Blue" />
Run Code Online (Sandbox Code Playgroud)

然而,我对这个解决方案的问题是我想在 GridSplitter 的左侧设置一个边框(见上文),这在使用自定义 GridSplitter 样式时不起作用。
有谁知道如何让这个工作?

wpf xaml gridsplitter

4
推荐指数
1
解决办法
1660
查看次数

垂直和水平GridSplitter

我有一个网格,我试图把垂直和水平GridSplitters.这是我的主要网格,我希望它尽可能流畅.

在我的第二个定义中,我得到了"Missing Grid.Column setter for non-first child"

我发现了很多关于实现其中一个的文档.我没有发现任何迹象表明我可以做到这两点.但是,我们的行业是由想要推动功能的人组成的.

这是我的XAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50*"></ColumnDefinition>
        <ColumnDefinition Width="5"></ColumnDefinition>
        <ColumnDefinition Width="50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="50*"></RowDefinition>
        <RowDefinition Height="5"></RowDefinition>
        <RowDefinition Height="50*"></RowDefinition>
    </Grid.RowDefinitions>
    <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"></GridSplitter>
    <GridSplitter  Grid.Row="1" Height="5" HorizontalAlignment="Stretch"></GridSplitter>
Run Code Online (Sandbox Code Playgroud)

wpf gridsplitter

4
推荐指数
1
解决办法
6091
查看次数