Wpf StackPanel扩展父网格的外部大小

Wpf StackPanel扩展父网格的外部大小,wpf,Wpf,我是WPF的新手,所以如果我遗漏了一些明显的东西,请道歉。我有一个绑定到obs中项目的模板。收集我试图得到它,使第二列,即“test test…”部分具有可变的宽度,可以填充父网格中的所有可用空间 但我发现,我的代码会自动显示“test test…”文本框的所有文本,而不仅仅是绑定到网格中的可用空间,而是创建下面的滚动条 相反,我希望“test-test”被切断,以便其他所有内容都适合,这样就不会出现滚动条(当用户调整屏幕大小时,“test-test…”文本框将自动调整大小以适应新的空间)。有

我是WPF的新手,所以如果我遗漏了一些明显的东西,请道歉。我有一个绑定到obs中项目的模板。收集我试图得到它,使第二列,即“test test…”部分具有可变的宽度,可以填充父网格中的所有可用空间

但我发现,我的代码会自动显示“test test…”文本框的所有文本,而不仅仅是绑定到网格中的可用空间,而是创建下面的滚动条

相反,我希望“test-test”被切断,以便其他所有内容都适合,这样就不会出现滚动条(当用户调整屏幕大小时,“test-test…”文本框将自动调整大小以适应新的空间)。有办法吗

我的模板代码如下所示:

            <DataTemplate x:Key="MainTemplate">
            <Grid Margin="4" ClipToBounds="True">
                <Grid.Resources>
                    <local:BooleanToHiddenVisibility x:Key="boolToVis"/>
                </Grid.Resources>
                <StackPanel Orientation="Vertical" ClipToBounds="True">
                    <Grid Width="Auto" >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="25"/>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="60" />
                            <ColumnDefinition Width="40" />
                            <ColumnDefinition Width="60" />
                            <ColumnDefinition Width="40" />
                            <ColumnDefinition Width="60" />
                            <ColumnDefinition Width="40" />
                            <ColumnDefinition Width="40" />
                        </Grid.ColumnDefinitions>
                        <CheckBox Grid.Column="0" Name="checkViewTextBox"/>
                        <TextBlock Grid.Column="1" Text="{Binding OriginalQuote}" FontWeight="Bold" TextTrimming="WordEllipsis" FontStyle="Italic" ClipToBounds="True"/>

                        <TextBlock Margin="10,0,0,0" Grid.Column="2"  Text="plane :" FontWeight="SemiBold" Width="60"/>
                        <TextBlock Margin="5,0,0,0" Grid.Column="3" Text="{Binding Mid}" Width="40"/>

                        <TextBlock Margin="10,0,0,0" Grid.Column="4"  Text="data2 :" FontWeight="SemiBold" Width="60"/>
                        <TextBlock Margin="5,0,0,0" Grid.Column="5" Text="{Binding MidTwo}" Width="40"/>

                        <TextBlock Margin="10,0,0,0" Grid.Column="6"  Text="data3:" FontWeight="SemiBold" Width="60"/>
                        <TextBlock Margin="5,0,0,0" Grid.Column="7" Text="{Binding MidThree}" Width="40"/>

                        <Button Margin="10,0,0,0" Content="History" Grid.Column="8" Click="History_Click" Width="40"/>
                    </Grid>

                    <StackPanel Orientation="Horizontal" Visibility="{Binding Path=IsChecked, ElementName=checkViewTextBox, Converter={StaticResource boolToVis}}">
                        <StackPanel.Resources>
                            <Style BasedOn="{StaticResource tbstyle}" TargetType="{x:Type TextBlock}" />
                        </StackPanel.Resources>
<!--Other stuff thats working ok-->

                </StackPanel>
            </Grid>
        </DataTemplate>

非常感谢您的帮助


另外,我一直在添加随机属性,希望其中一个能起作用,所以如果看起来我在上面有随机的东西,那可能就是为什么

好吧,我不确定这对你有什么帮助,但我想说一些关于WPF布局的话

它有两个步骤:测量和安排

在第一阶段,控件尝试计算其所需状态。StackPanel询问孩子们想要的尺寸。它不限制它们的大小。(绑定到OriginalQoute的TextBlock并没有显式设置宽度!)

在第二阶段,安排控制。 堆栈面板允许占用列的整个左侧空间,但它会将其子级排列为无限大小,因此TextBlock会完全显示文本

问题是如何限制文本块的大小

试着装订

<TextBlock Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=StackPanel}, Path=ActualWidth}"/>


谢谢。我试着把它放进文本锁,但没有骰子。。。在当前情况下,我是否可以使用特定列的Grid.columnDefinitions中的转换器或其他内容,在该列中,我计算作为父项的宽度-其余子项的宽度?如果是这样的话,您如何在WPF端创建/引用这样的转换器?据我所知,答案是否定的。但是我注意到了什么。屏幕截图上有一个滚动条。我记不清了,但StackPanel没有嵌入式scrollviwer。我想我对StackPanel的看法是错的。可能它占用的空间比列给它的空间要多,网格支持滚动。这就是为什么我的决策不起作用。如果此列是应占据整个左侧空间的列,请将其列定义宽度从“自动”更改为“星形”。Width=“*”并将StackPanel的水平方向对齐设置为拉伸。是的,有时WPF布局会让我发疯。很多时候我想做类似的事情。问题的关键是一些控件根据子控件的大小计算其大小。如果它的孩子需要父母的尺寸来正确地安排自己,那么糟糕的事情就会发生在这里。我想我实际上是通过一个转换器得到了它。不过,谢谢你的有约束力的建议——真是太棒了key@voroninp如果WPF布局让你抓狂,这肯定是你不理解它的标志。。。