2016-06-24 3 views
0

私はWPFアプリケーションのためのフォームを書いており、Buttonが提供する視覚的な状態を使用したいと思います。Button内のBorderをどのように伸ばすことができますか?

<Button 
    Grid.Column="0" 
    Name="GenderMaleButton" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch" 
    BorderThickness="0" 
    Padding="0"> 
    <Border 
     Background="White" 
     BorderThickness="2" 
     CornerRadius="5" 
     Padding="5" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch"> 
     <TextBlock/> 
    </Border> 
</Button> 

しかし、私のBorderButtonを充填されていません。だから私のXAMLは今、この権利のようなものです。 BorderButtonと記入するにはどうすればよいですか?または、Buttonのビジュアル状態を使用してBorderに影響を与えるには、別の方法でBorderButtonの中にラッピングするのではなく、

またはBorderに視覚的な状態を適用できますか?もしそうなら、どうですか?

EDIT:

result

ので、選択状態(白のボーダー、ブルーBG)、およびデフォルト状態(ブルーボーダー、白BG):私が望む結果はこのようなものです。ハードの推測から

+1

画像を表示できますか、どのようにボタンが表示されますか? –

答えて

2

、私はbutton.Tryの内側にあなたが境界線を埋めるために必要があると思うのコードbelow.UseのControlTemplate

<Button Grid.Column="0" 
     Name="GenderMaleButton" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     BorderThickness="0" 
     Padding="0"> 

     <Button.Template> 
      <ControlTemplate>     
       <Border Background="#6A6B9A" 
         BorderThickness="2" 
         CornerRadius="5" 
         Padding="5" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch"> 
         <TextBlock TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White" Text="Male"></TextBlock> 
       </Border>    
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
+0

これはうまくいくはずですが、ハードコードされた幅と高さの値を使用したくないのです。私のアプリは異なる画面サイズに適応する必要があるからです。 – vrwim

+0

@vrwimが回答を編集しました –

+0

これは素晴らしいことですが、これをテストしようとしています。私はこれが可能であることを知らなかった。 – vrwim

1

あなたはStretchHorizontalContentAlignmentVerticalContentAlignmentを設定しておく必要があります。

<Button 
Grid.Column="0" 
Name="GenderMaleButton" 
HorizontalContentAlignment="Stretch" 
VerticalContentAlignment="Stretch" 
BorderThickness="0" 
Padding="0"> 
    <Border 
    Background="White" 
    BorderThickness="2" 
    CornerRadius="5" 
    Padding="5" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"> 
     <TextBlock/> 
    </Border> 
</Button> 
+0

私はこれを試して、それは実際に私のためにそれを伸ばしているようではない...しかし、OPのために働くかもしれない? – ManIkWeet

+0

これは動作しませんが、何故か分かりません。 – vrwim

1

これを試してみてください:

<StackPanel Height="40" Orientation="Horizontal"> 
     <StackPanel.Resources> 
      <Style x:Key="GenderButtonStyle" TargetType="{x:Type Button}"> 
       <Setter Property="MinWidth" Value="100" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
          <Border x:Name="InternalBorder" 
            CornerRadius="5" 
            Padding="5"> 
           <TextBlock x:Name="InternalText" 
              HorizontalAlignment="Center" 
              VerticalAlignment="Center" 
              Text="{TemplateBinding Content}" /> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="Tag" Value="Male"> 
            <Setter TargetName="InternalBorder" Property="Background" Value="RoyalBlue" /> 
            <Setter TargetName="InternalText" Property="Foreground" Value="White" /> 
           </Trigger> 
           <Trigger Property="Tag" Value="Female"> 
            <Setter TargetName="InternalBorder" Property="Background" Value="White" /> 
            <Setter TargetName="InternalBorder" Property="BorderBrush" Value="RoyalBlue" /> 
            <Setter TargetName="InternalBorder" Property="BorderThickness" Value="1,1,1,1" /> 
            <Setter TargetName="InternalText" Property="Foreground" Value="RoyalBlue" /> 
           </Trigger> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <!-- Whatever you want --> 
           </Trigger> 
           <Trigger Property="IsPressed" Value="True"> 
            <!-- Whatever you want --> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </StackPanel.Resources> 
     <Button x:Name="MaleButton" 
       Content="Male" 
       Style="{StaticResource GenderButtonStyle}" 
       Tag="Male" /> 
     <Button x:Name="FemaleButton" 
       Margin="5,0,0,0" 
       Content="Female" 
       Style="{StaticResource GenderButtonStyle}" 
       Tag="Female" /> 
    </StackPanel> 

は、私が何をやったか説明するために、私は2つのボタンを水平<StackPanel/>の中に置き、リソースのサブタグにはボタンスタイルを作っておき、あなたが望むボタンに割り当てることができます。 そのスタイルの中で、私はテンプレートを開いて、あなたが説明したことをする自分の小さなものを作りました。

一般に、コントロールが現状のままであることを望んでいない場合は、テンプレートを作成して自分で作成することをお勧めします。 このように、マウスオーバーやフォーカス、または押したときの外観を定義できるようになりました。

関連する問題