1

こんばんは。私は自分の問題を約 2 日間調査しており、問題のバリエーションを少なくとも 12 種類試しました。それらの最後の 1 つがすべて完全な失敗だったので、ここにコードを投稿することはしません。

必要なのは、ボーダーレス ウィンドウ用の StackPanel です。StackPanel には不透明な背景が必要であり、子には透明な背景が必要です。子要素、StackPanel、および下にあるメイン ウィンドウ全体を透過する透明性が必要です。

これについてどうすればいいのか、どこから始めればよいのか、誰にもわかりませんか? 私は中級レベルのプログラマーで、ここで大きな壁にぶつかりました。通常の容疑者をオーバーライドして、Panel クラスから継承しようとしました。MeasureOverride、ArangeOveride、OnRender など。

私が考えていたことの 1 つは、親ノードとすべての子ノードの間で何らかの形式の CombinedGeometry を使用することでした。

前もって感謝します!!

4

2 に答える 2

0

あなたがおそらく見逃しているのはWindow.AllowsTransparency="True". WindowStyleプロパティを に設定する必要があるため、独自のウィンドウ タイトルと境界線を作成する必要がありますNone

私はあなたのためにサンプルを作成しました:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        AllowsTransparency="True"
        Background="Transparent"
        WindowStyle="None"
        WindowStartupLocation="CenterScreen">
    <Border BorderBrush="Black" BorderThickness="1">        
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="Application">
                    <MenuItem Header="_Close" Click="MenuItem_Click"/>
                </MenuItem>
            </Menu>
            <ToolBar DockPanel.Dock="Bottom">
                <Button>sample button</Button>
            </ToolBar>
            <StackPanel>
                ... your whiteboard ...
            </StackPanel>
        </DockPanel>
    </Border>
</Window>

.

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}
于 2012-05-17T09:23:02.023 に答える
0

さて、何時間にもわたる力ずくで「ハッキング」した後、必要なことを達成する手段を見つけることができました。

<Border Name="OuterBorder" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Orange" BorderThickness="1.5">
    <Border Name="FillerStrip" BorderBrush="Black" BorderThickness="20">
        <Border Name="InnerBorder" BorderBrush="Orange" BorderThickness="1.5">
            <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent">
                <local:GlassBoardControl BorderBrush="Orange"            BorderThickness="2" AxisBrush="LawnGreen" AxisThickness="15" x:Name="screen" />

            </StackPanel>
        </Border>    
    </Border>
</Border>

今、私の唯一の質問は、これを境界線として使用してカスタムパネルを作成するにはどうすればよいですか? どこから始めるべきかについてのアイデアは大歓迎です。

于 2012-05-19T08:13:05.690 に答える