ドックパネルの他の子供をカバーするキャンバスはなぜですか? 次のように私は、XAMLで標準的な慣習に従ってクライアント領域の上部にあるメニューバーやウィンドウのクライアント領域の下部のステータスバーを設定してい:CanvasがDockpanelのピアコントロールをカバーするのはなぜですか?
<Window x:Class="RichCoreW.ScenEditWnd"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ScenEditWnd" Height="490" Width="776" HorizontalAlignment="Right">
<DockPanel Name="mapDockP">
<Menu IsMainMenu="True" DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Save" Name="menuISave" Click="menuISave_Click"/>
<MenuItem Header="Make Playable" Click="MakePlayable" />
</MenuItem>
<MenuItem Command="ApplicationCommands.Help" />
</Menu>
<StackPanel DockPanel.Dock="Bottom" Name="stackPanel1" Orientation="Horizontal" background="Yellow">
<Label Content="Playable:" Name="label1" />
<Label Name="labPlayable" />
</StackPanel>
</DockPanel>
</Window>
その後、私は追加次のようにC#コードでCanvasから継承するMapCanvEditクラスのインスタンスです。 Dockpanelに追加される最後の子として、Dockpanelの残りの領域を取る必要があります。しかし、それはクライアント領域の全体をカバーするだけでなくメニューとステータスバーをカバーします。正確に言えば、他の2つのスタックパネルをカバーするキャンバスの子供たちです。キャンバス(MapCanvEdit)が空であるあなたはどこにメニューバーやステータスバーを見ることができます:私は簡単にするために他の方法を残してきた
public partial class ScenEditWnd : Window
{
ScenC scenC;
MapCanvEdit mapCanvE;
public ScenEditWnd(ScenC scenCI)
{
InitializeComponent();
scenC = scenCI;
mapCanvE = new MapCanvEdit(scenC);
mapDockP.Children.Add(mapCanvE);
MouseWheel += mapCanvE.Zoom;
mapCanvE.SizeChanged += delegate { mapCanvE.DrawHexs(); };
ContentRendered += delegate { mapCanvE.DrawHexs(); };
labPlayable.Content = scenC.playable.ToString();
}
}
。どんな助けにも感謝!
ああ、ありがとう、それはWPFのための非常に簡単な答えです。私はチェックしてクリッピングがパフォーマンスを向上させるように見えない。 WPFはまだ画面の外に出ている子供をレンダリングする時間を費やすように見えます。 –
これは正しいです。それをしないように指示するには、UI仮想化技術(Googleのキーワード:wpf仮想化キャンバス)を使用することができます。 – Anvaka