1

次のようなモーダル WPF ウィンドウを作成しました。

ここに画像の説明を入力

ウィンドウのコードは次のとおりです。

<Window x:Class="Dionysus.Core.Controls.ModalWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ModalWindow" AllowsTransparency="True" Background="Transparent" WindowStyle="None">

<Grid Name="MainGrid">
    <Rectangle Fill="Gray" Opacity="0.7" />
</Grid>

次に、「ErrorControl」が次のように追加されます。

MainGrid.Children.Add(uc);

問題は、スタック トレースを展開するとすぐに、コントロールの透明度も変化することです。

ここに画像の説明を入力

ScrollViewerこれは、誤った透明度を使用する 、つまり をRectangle含む の代わりにを使用することと関係があると思いますWindow

Opacityまた、UserControlを所有する のを 1 に設定し、ScrollViewerをバインドしましたOpacity

<ScrollViewer Background="WhiteSmoke" Opacity="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=Opacity}">

誰でも私を助けることができますか?

--

アップデート

UserControlに挿入されるのコードは次のとおりです。Window

<Grid x:Name="LayoutRootx" Background="WhiteSmoke">
        <StackPanel VerticalAlignment="Stretch">
            <TextBlock TextWrapping="Wrap" Margin="5" Text="An error has occured:" Foreground="Black" FontSize="15" FontWeight="Medium"/>
            <TextBlock TextWrapping="Wrap" Margin="5,10,5,5" Text="{Binding Error}"/>
            <odc:OdcExpander Header="Stack Trace" Margin="5" IsExpanded="False" Background="WhiteSmoke">
                <TextBox Text="{Binding StackTrace}" TextWrapping="Wrap" Margin="5,10,5,5" IsReadOnly="True" MaxHeight="370"/>
            </odc:OdcExpander>
            <odc:OdcExpander Header="Comment" Margin="5" IsExpanded="False">
                <TextBox Text="{Binding Comment}" TextWrapping="Wrap" Margin="5,10,5,5" MaxHeight="370" Name="txtComment"/>
            </odc:OdcExpander>
            <StackPanel Margin="5,10,5,5" Orientation="Horizontal" HorizontalAlignment="Left">
                <Button Style="{StaticResource DionysusButton}"  Width="100" Height="23" IsDefault="True" Name="btnSendError">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="/Dionysus.Shell;component/Images/camera-icon.png" Margin="0,0,5,0">

                        </Image>
                        <TextBlock Text="Send to IT" VerticalAlignment="Center"/>
                        <core:DionysusTriggerAction Height="0" Width="0" TargetControl="{Binding ElementName=btnSendError}" MethodName="SendError"></core:DionysusTriggerAction>
                    </StackPanel>
                </Button>
                <Button Style="{StaticResource DionysusButton}"  Width="100" Height="23" Name="btnExit" Margin="10,0,0,0" IsCancel="True">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="/Dionysus.Shell;component/Images/DeleteRed.png" Margin="0,0,5,0">

                        </Image>
                        <TextBlock Text="Close" VerticalAlignment="Center"/>
                    </StackPanel>
                </Button>
                <core:DionysusTriggerAction Height="0" Name="triggerAction2" Width="0" TargetControl="{Binding ElementName=btnExit}" MethodName="Exit"></core:DionysusTriggerAction>
            </StackPanel>
        </StackPanel>
    </Grid>
4

2 に答える 2

0

わかりましたので、私に合った解決策を見つけました。それは最善ではないと確信していますが、私と同じ問題を抱えている人を助けるかもしれません.

UserControl問題は、自分に追加した自分のコントロールWindowが透過的であることでした。理由はわかりませんでしたが、簡単な回避策を見つけました。

OpacityMaskプロパティをUserControl必要なBackground色に変更することで、コントロールの不透明度が変わっても、指定した でマスクされBrushます。

uc.OpacityMask = Brushes.WhiteSmoke;

それが誰かを助けることを願っています!

于 2013-02-22T09:35:06.910 に答える
0

ウィンドウのサイズが固定されており、サイズを変更できない場合は、次のトリックを使用できます。

<Grid>
    <Border BorderThickness="100" BorderBrush="Gray" Opacity="0.7">
        <Grid Background="White" Grid.Column="1" Grid.Row="1" x:Name="contentPlaceHolder">
            <TextBlock  Text="HELLO WORLD" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </Border>
</Grid>

ただし、ウィンドウが常に同じサイズであるとは考えにくいため、より動的にするために、次のようにウィンドウのレイアウトを変更できます。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="YourDesiredSize"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="YourDesiredSize"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="0" Grid.ColumnSpan="3"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="2" Grid.ColumnSpan="3"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="1" Grid.Column="0"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="1" Grid.Column="2"/>

    <Grid Grid.Column="1" Grid.Row="1" Background="White" x:Name="contentPlaceHolder">
        <TextBlock  Text="HELLO WORLD" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Grid>

このウィンドウを別のウィンドウの上に配置した結果は、多かれ少なかれ次のようになります。

透明なスクロールビューア

に追加する代わりにMainGrid、UserControl をcontentPlaceHolderまたは に追加します。

contentPlaceHolder.Children.Add(uc);
于 2013-02-20T12:16:08.697 に答える