2

Canvas、Buttons、ComboBoxなどの他のUIコントロールで構成されるボーダーがあります。ボーダーにDropShadowEffectのみが必要ですが、すべての子コントロールはDropShadowEffectを継承することになります。

たとえば、次のコードは、TextBox、Button、ComboBoxにDropShadowEffectを生成します。DropShadowEffectを境界線にのみ適用するにはどうすればよいですか?

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

2 に答える 2

3

がDockPanel や Canvas などの に適用されると、すべての子要素を含む要素またはビジュアルのビジュアル ツリーに効果が適用されますDropShadowEffectlayout container

ただし、次の記事では、この目標を達成するための回避策を示しています

ボーダーに効果があるとしましょう。持っているだけ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>
于 2012-11-14T08:14:51.343 に答える
2

少しトリッキーです、私はこのようにしました。

 <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>

それが役に立てば幸い..

于 2012-11-14T07:51:53.483 に答える