たいのですが、コンポーネントのラインナップ要素の長方形平面の3Dボーダー?

StackOverflow https://stackoverflow.com/questions/581838

  •  06-09-2019
  •  | 
  •  

質問

を作っていきたい長方形の"平板3D"を探っ管理テンプレート。でもシンプルなことを行って下さるがくるのは、もしかしたバリエーシ左右のラインです。

より複雑な版として提供する以上のブラシのように勾配が適用されます。

デフォルトの <Border> 要素のコンポーネントのラインナップで指定し異なる厚さの一端が見つからなる複数指定されました。

では、どうすれば今の私は効果を生み出したいだけ簡単にできますか?

編集 これかに記載のとおり、どのように使用したいと思います。個人的には嬉しいスタイルまたはユーザーます。のユーザー制御を使用することがある。

<FourSidedBorder LeftSideBrush="#00f" RightSideBrush="#0f0" ... />

そして時には簡単な:

<FourSidedBorder BorderBrush="#00f,#0f0,#f00,#fff"
                 BorderThickness="1,2,3,4" ... />

これらのだ。他の顕熱、簡潔な解決を歓迎いたします。

役に立ちましたか?

解決 2

ここで私が何をしたいのほとんどを達成し、私が考案したソリューションです。これは、独立して四方を完全に制御を与えるものではありませんが、それは私がしたい長方形の平面の3Dビューを提供します。

ここでは、それがどのように見えるかです:

自分自身でそれを見るために Kaxamlするにこれを貼り付けます:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Background="#CCC">
  <Page.Resources>
    <!-- A brush for flat 3D panel borders -->
    <LinearGradientBrush x:Key="Flat3DBorderBrush"
                         StartPoint="0.499,0" EndPoint="0.501,1">
      <GradientStop Color="#FFF" Offset="0" />
      <GradientStop Color="#DDD" Offset="0.01" />
      <GradientStop Color="#AAA" Offset="0.99" />
      <GradientStop Color="#888" Offset="1" />
    </LinearGradientBrush>
  </Page.Resources>
  <Grid>  
    <!-- A flat 3D panel -->
    <Border
          HorizontalAlignment="Center" VerticalAlignment="Center"
          BorderBrush="{StaticResource Flat3DBorderBrush}"
          BorderThickness="1" Background="#BBB">

          <!-- some content here -->
          <Control Width="100" Height="100"/>

    </Border>  
  </Grid>
</Page>

アウト他の誰かがお役に立てば幸いです。私は、この問題に対する革新的なソリューションに目を光らせて、まだですので、投稿を維持し、私はこの1つより良い答えを受け入れるだろう。

他のヒント

私は、互いの上に直接、複数の境界線を配置することによって、このような何かをやりました。例えば:ます。

<Border 
  x:Name="TopAndLeft" 
  BorderThickness="3,3,0,0" 
  BorderBrush="{x:Static SystemColors.ControlLightBrush}">
<Border 
  x:Name="BottomAndRight" 
  BorderThickness="0,0,3,3" 
  BorderBrush="{x:Static SystemColors.ControlDarkBrush}">
    <ContentPresenter ... />
</Border>
</Border>

これはprovides--コーナー半径などに接する他のすべての機能の付加的な利点を提供します。

正直なところ、おそらく最も簡単な方法は、積層技術を用いることであろう。例えば、このようなグリッドを作成します:

  <Grid Width="50" Height="50">  
     <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
     </Grid.RowDefinitions>
     <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
     </Grid.ColumnDefinitions>

     <!-- Top Border -->
     <Border Height="3" Background="LightGray" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" />

     <!-- Right Border -->
     <Border Width="3" Background="DarkGray" Grid.Column="2" Grid.Row="0" Grid.RowSpan="3" />

     <!-- Content -->
     <Border Background="Gray" Grid.Row="1" Grid.Column="1" />

     <!-- Left Border -->
     <Border Width="3" Background="LightGray" Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" />

     <!-- Bottom Border -->
     <Border Height="3" Background="DarkGray" Grid.Row="2" Grid.Column="1" />

  </Grid>

私はあなたのアイデアを得ると思います。これはおそらく、それを行うための最も簡単な方法です。あなたは、テンプレートとしてこれを設定し、このようにそれを使用することができます:

<Template x:Key="My3DBorder" TargetType="ContentControl">
    <!-- Put the Grid definition in here from above -->
</Template>

<ContentControl Template="{StaticResource My3dBorder}">
   <!-- My Content Goes Here -->
</ContentControl>

すので参考に PresentationFramework.クラシック 組み立ておよびその利用

<Window xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic">
...

<Grid Width="50" Height="50">
    <mwt:ClassicBorderDecorator BorderThickness="3,3,3,3"/>
</Grid>

使っていた この技術を見る株式会社アトコントロールテンプレート どデフォルトボタンが表

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top