2012-11-14 50 views
2

一個特定的元素我有一個邊境是由像畫布,按鈕,組合框等。我只想要一個DropShadowEffect在邊境其他UI控件的,但所有的孩子控制最終繼承DropShadowEffectDropShadowEffect在XAML

例如,以下代碼在TextBox,Button,ComboBox上產生DropShadowEffect。 如何申請DropShadowEffect僅限於邊界?

<Border> 
    <Border.Effect> 
     <DropShadowEffect ...> 
    </Border.Effect> 
    <Canvas> 
     <TextBox>...</TextBox> 
     <Button>...</Button> 
     <ComboBox>...<ComboBox> 
    </Canvas> 
</Border> 

回答

2

DropShadowEffect應用於layout container,如DockPanel中或帆布,效果被施加到視覺元素或視覺的樹,包括它的所有子元素。

但是,下面的文章顯示了一種解決方法來實現此目標here

假設您的邊界有效。只要有another border with same position but without the effect,這將解決這個問題 -

<Border Margin="10"> 
    <Border.Effect> 
     <DropShadowEffect ...> 
    </Border.Effect> 
</Border> 
<Border Margin="10"> 
    <Canvas> 
     <TextBox>...</TextBox> 
     <Button>...</Button> 
     <ComboBox>...<ComboBox> 
    </Canvas> 
</Border> 
+0

不錯的技巧建議,但它不起作用。另外,我還爲第二個邊框添加了白色/透明邊框,但仍繼承了第一個邊框效果。奇怪... – KMC

+0

居然。有用。謝謝。 – KMC

1

有點棘手,我這樣做。

<ControlTemplate x:Key="ShadowBorderShadowTemplate"> 
     <!-- Start shadow effect to fragment --> 
     <Grid x:Name="Transform"> 
      <Border BorderThickness="1" 
       BorderBrush="Gray" 
       Background="{x:Null}" 
       Margin="1"> 
       <Border.Effect> 
        <DropShadowEffect BlurRadius="6" 
       Direction="270" 
       ShadowDepth="2" /> 
       </Border.Effect> 
      </Border> 

      <Border BorderThickness="0" 
        Margin="1,2,1,1" 
        BorderBrush="{x:Null}" 
        Background="White" /> 
     </Grid> 
     <!-- End shadow effect to fragment --> 
    </ControlTemplate> 

    <ControlTemplate x:Key="ContentControlTemplateWithShadow" 
       TargetType="{x:Type ContentControl}"> 
     <Grid> 
      <!-- Shadow around the left nav --> 
      <ContentControl Template="{DynamicResource ShadowBorderShadowTemplate}" /> 
      <ContentPresenter /> 
     </Grid> 
    </ControlTemplate> 

和使用的資源等

<ContentControl Template="{StaticResource ContentControlTemplateWithShadow}"> 
     <Border> 
      <Canvas> 
       <TextBox Text="ABCD" Canvas.Left="115" Canvas.Top="134" /> 
       <Button Canvas.Left="115" Canvas.Top="91">Test</Button> 
       <ComboBox Canvas.Left="115" Canvas.Top="54" /> 
      </Canvas> 
     </Border> 
    </ContentControl> 

希望它能幫助..

+0

感謝,但現在看來似乎不是XAML – KMC

+0

更容易做到這一點在後面的代碼可能會但如果我們需要在多個地方申請的影子呢? –