문제

제 무지를 용서 해주세요. 저는 WPF를 처음 접했습니다.

나는 "내부"둥근 모서리의 모습을 보여주는 애플리케이션에서 사소한 시각적 효과를 구현하려고합니다. 문제의 창에는 여러 개의 uelements를 캡슐화하는 어두운 경계가 있으며 그 중 하나는 창의 맨 아래에 위치한 상태 바입니다. 이 상태 바는 창의 테두리와 일치하는 어두운 배경을 가지고 있습니다. 상태 바 위에는 컨텐츠보기가 있으며 현재 그리드 인 컨텐츠 뷰가 있습니다. 배경은 반 트랜스 파트입니다 (저는 이것이 제약 조건이라고 생각합니다. 아래 데스크탑에 대한 컨텐츠보기를 통해 볼 수 있습니다). 나는 내용보기 (아래 그림의 투명한 내부 영역으로 표시)가 둥근 모서리의 모습을 갖기를 원하지만, 환상을 직접 만들어야한다고 기대합니다.

(내가 멍청하고 포스터가 아니기 때문에 이미지를 게시 할 수 없습니다. 여기에서 그림을 찾으십시오)

나의 첫 번째 접근법은 상태 바 바로 위의 사각형 (테두리와 동일한 어두운 색으로 채워진)을 추가하고 둥근 모서리가있는 불투명도 마스크에 테두리를 할당하는 것이 었습니다 (Chris Cavanagh **가 제안한 솔루션과 유사). 안타깝게도, 생산 된 효과는 내가 달성하려는 효과와 정반대입니다.

나는 클립 속성이 이런 종류의 상황에서 사용할 수 있다는 것을 이해하지만, 어떤 종류의 지오메트리를 사용하는 것은 그것이 거주하는 영역에 동적으로 크기를 조정하지 않기 때문에 부적절한 것으로 보인다.

편집 : 내 XAML 포함 :

<Grid Background="{StaticResource ClientBg}" Tag="{Binding OverlayVisible}" Style="{StaticResource mainGridStyle}">

        <DockPanel LastChildFill="True">

            <!-- Translates to a StackPanel with a Menu and a Button -->
            <local:FileMenuView DockPanel.Dock="Top" />

            <!-- Translates to a StatusBar -->
            <local:StatusView DockPanel.Dock="Bottom" />

            <!-- Translates to a Grid -->
            <local:ContentView />

        </DockPanel>

    </Grid>

모든 포인터는 환영받는 것 이상입니다. 필요한 경우 더욱 심각한 세부 사항을 제공 할 준비가되었습니다.

** http://www.dotnetkicks.com/wpf/WPF_easy_rounded_corners_for_anything

도움이 되었습니까?

해결책

편집하다: 이제 나는 당신이 의미하는 바를 얻었습니다. 실제로 PATH + 불능 마스크 접근법을 사용할 수 있습니다. 불투명도 마스크로 사용하려면 "거꾸로 된"경로를 그려야합니다. 그러나 나는 당신을위한 더 간단하고 빠른 솔루션을 가지고 있습니다 :). Border + Cornerradius를 사용하고 단단한 경로로 간격을 채우십시오. Kaxaml에서 다음 코드를 시도하고 이것이 당신이 찾고있는 것인지 알려주십시오.

<Window
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Width="240"
   Height="320"
   AllowsTransparency="True"
   Background="Transparent"
   WindowStyle="None">
   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="24"/>
         <RowDefinition Height="*"/>
         <RowDefinition Height="24"/>
      </Grid.RowDefinitions>
      <Border Background="Black"/>
      <Border Grid.Row="1" BorderBrush="Black" BorderThickness="5">
         <Grid>
            <Border Background="White" CornerRadius="0, 0, 5, 5" Opacity="0.7"/>
            <Path
               Width="15"
               Height="15"
               HorizontalAlignment="Left"
               VerticalAlignment="Bottom"
               Data="M10,10 L5,10 L5,5 C4.999,8.343 6.656,10 10,10 z"
               Fill="Black"
               Stretch="Fill"/>
            <Path
               Width="15"
               Height="15"
               HorizontalAlignment="Right"
               VerticalAlignment="Bottom"
               Data="M10,10 L5,10 L5,5 C4.999,8.343 6.656,10 10,10 z"
               Fill="Black"
               Stretch="Fill">
               <Path.RenderTransform>
                  <TransformGroup>
                     <ScaleTransform ScaleX="-1"/>
                     <TranslateTransform X="15"/>
                  </TransformGroup>
               </Path.RenderTransform>
            </Path>
         </Grid>
      </Border>
      <Border Grid.Row="2" Background="Black"/>
   </Grid>
</Window>

추신 : 렌더 변환을 피 함으로써이 솔루션을 단순화 할 수 있지만 아이디어를 얻었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top