2

私は WPF にかなり慣れていないので、明らかな何かが欠けている場合は申し訳ありません。obs のアイテムにバインドされているこのテンプレートがあります。コレクション。2列目の「テストテスト...」部分の幅が可変になり、親グリッドで使用可能なすべてのスペースを埋めるようにしようとしています。

私が見つけたのは、私のコードは、グリッド内の利用可能なスペースにバインドするのではなく、その「テスト テスト...」テキスト ボックスのすべてのテキストを自動的に表示し、代わりに以下に表示されるスクロール バーを作成することです。 .

ここに画像の説明を入力

代わりに、スクロールバーが表示されないように、他のすべてが収まるように「テストテスト」を切り取ってください(ユーザーが画面のサイズを変更すると、その「テストテスト...」テキストボックスは自動的にサイズが変更されます新しいスペース)。それを行う方法はありますか?

そのテンプレートの私のコードは次のとおりです。

            <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>

どんな助けでも大歓迎です!

PS私はランダムなプロパティを追加してきたので、ランダムなものがそこにあるように見える場合は、おそらく....

4

1 に答える 1

3

まあ、それがあなたに役立つかどうかはわかりませんが、WPF レイアウトについていくつかの言葉があります。

測定と配置の2つのステップがあります。

最初の段階で、コントロールは目的の状態を計算しようとします。StackPanel は、その子に必要なサイズを尋ねます。サイズに制限はありません。(OriginalQoute にバインドされた TextBlock には、明示的に設定された幅はありません!)

第二段階では、制御が配置されます。スタック パネルは列の左側のスペース全体を占めることができますが、サイズが無制限であるかのように子を配置するため、TextBlock はテキストを完全に表示します。

問題は、TextBlock のサイズを制限する方法です。

バインドしてみる

<TextBlock Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=StackPanel}, Path=ActualWidth}"/>
于 2012-09-04T16:39:13.987 に答える