メインウィンドウの幅を小さくすると境界要素がクリップされる理由を理解しようとします。 以下のコードブロックをご覧ください。ここでWPFでウィンドウのサイズを変更すると、ネガティブマージンコントロールがクリップされる
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="500" Name="MainWin">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Border Background="Blue" Grid.Row="0" BorderBrush="Black" Width="{Binding ElementName=MainWin, Path=Width}" />
<Grid Grid.Row="1" Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Background="Black">
<Border Background="White" Width="150" Height="150" BorderBrush="Black" BorderThickness="2"
Margin="0,-100,0,0">
<TextBlock Text="{Binding ElementName=MainWin, Path=Width}" FontSize="14" FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Background="Red" />
<StackPanel Grid.Column="2" Background="Yellow" />
</Grid>
</Grid>
</Window>
境界線が元のウィンドウ幅で表示されるものです:あなたは国境があるため、その容器の外に表示されていることを見ることができるように
非リサイズウィンドウ
負の上マージン、この場合-100。これは私が国境のために持つことを期待しているものです。しかし、メインウィンドウの幅を赤色の矩形の右端まで減らすと、境界線の外側が切り取られます。
私はArrangeOverride、MeasureOverrideとGetLayoutClipメソッドをオーバーライドしていますが、メインウィンドウのサイズが変更されているときに、残念ながら、これらのメソッドが呼び出されていないカスタムのStackPanelの内側に、この境界要素を配置しようとしてい
サイズ変更されたウィンドウ。
誰かが理由を説明でき、この問題を回避する方法を教えていただければ幸いです。 ありがとうございました。
Markusの説明をありがとうございます。 1.これは私の例です。私はちょうどボーダーがメインウィンドウの幅を持っていることを望んでいた 2。私はその点を見ることができます。上記の3つのメソッドをオーバーライドするカスタムグリッドを作成しようとしましたが、ウィンドウのサイズが変更されたときに呼び出されます。 3. :) アドバイスありがとう 5.私の実際のアプリケーションの問題は、私の例の場合です。 2つのグリッドが必要です。私が意味するところは、内側のグリッドはユーザコントロールのコンテナです ポイント2の説明に基づいて回避策を見つけます。 –