2010-03-10 3 views
1

여러 개의 색상이 지정된 컨트롤이있는 창을 고려하십시오. 모든 방아쇠가 방금 팝업 된 패널을 제외하고 모든 색상이 회색으로 표시되도록 양식에서 일부 방아쇠가 발생하면이 위에 패널을 배치하고 싶습니다. 누군가가 이것으로 나를 도울 수 있습니까 ??wpf에서 배경을 회색조로 바꾸기

답변

4

그레이 스케일하려는 클라이언트 영역의 Effect 속성을 사용합니다. 그러나 그레이 스케일 변환을 수행하려면 자체 픽셀 쉐이더를 만들어야합니다.

http://windowsclient.net/wpf/wpf35/wpf-35sp1-more-effects.aspx

당신은 신속하게 BlurEffect 클래스 대신 사용자 정의 쉐이더를 사용하여 개념을 테스트 할 수 있습니다.

<Window x:Class="WpfGrayscaleSample.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="327" Width="526"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="239*" /> 
     <RowDefinition Height="50*" /> 
    </Grid.RowDefinitions> 

    <Canvas Name="clientArea" Background="Transparent" Grid.Row="0"> 
     <!-- Just some controls --> 
     <Button Height="31" Name="button1" Width="80" Canvas.Left="30" Canvas.Top="125">Button</Button> 
     <Button Height="28" Name="button2" VerticalAlignment="Bottom" Click="button2_Click" HorizontalAlignment="Right" Width="75" Margin="0,0,16,34" Canvas.Left="66" Canvas.Top="54">Button</Button> 
     <Rectangle Margin="86,43,0,0" Name="rectangle1" Stroke="Black" Fill="Crimson" Height="59" HorizontalAlignment="Left" VerticalAlignment="Top" Width="109" Canvas.Left="145" Canvas.Top="44" /> 
    </Canvas> 

    <!-- Button to activate the shader effect --> 
    <Button Height="23" Margin="15,0,0,21" Name="button3" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="75" Grid.Row="1" Click="button3_Click">Button</Button> 
</Grid> 

그리고 단추 3에 대한 이벤트 핸들러는 단순히 것

는 회색 스케일링에 대한 사용자 지정 쉐이더를 연결하는 좀 더 작품이다 물론
private void button3_Click(object sender, RoutedEventArgs e) 
{ 
    clientArea.Effect = new BlurEffect() { Radius = 10.0 }; 
} 

하지만, 추가 보너스 픽셀 쉐이더의 성능이 향상 될 것입니다.

+0

이것은 내가 찾고있는 것입니다. 너의 흐림 효과는 물론, zorder를 변화시키는 micahtan의 생각도 고려 가치가있다. 고마워. – sudarsanyes

1

최상위 컨테이너 (그리드 등)에서 더 낮은 ZIndex에 사각형을 만들거나 하나 이상의 중첩 수준을 만듭니다.

패널을 팝업 할 때, 컨트롤과 패널 사이에 맞게 사각형의 ZIndex를 교체하십시오.

회색 음영까지는 VisualBrush로 할 수있는 멋진 방법이 있지만 사각형에 반투명 한 SolidColorBrush를 사용하면 꽤 멀어 질 수 있습니다.

+0

감사합니다. 귀하의 솔루션은 좋은 해킹 인 것 같습니다. – sudarsanyes

관련 문제