2017-07-16 5 views
0

を経由して、WPFボタンの境界線のCornerRadiusを設定する方法: -私は下のような単純なWPFのボタンを持っているスタイルとデータバインディング

<Button Height="150" Width="145" Canvas.Top="8" Canvas.Left="9" x:Name="cmdButton_Template" Background="{Binding Button_BackGround}" Style="{StaticResource MyLocalButton}" Mouse.PreviewMouseUp="cmdButton_Template_PreviewMouseUp" > 
    <Label> 
     <ContentControl HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Height="131" Canvas.Left="10" Canvas.Top="10" Width="142" > 
     <Canvas x:Name="ContentCanvas"> 
      <TextBlock Canvas.Left="{Binding Text_2_Left,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Canvas.Top="{Binding Text_2_Top,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Text="{Binding Text, ElementName=txtItem_Cat_Name2,UpdateSourceTrigger=PropertyChanged}" FontSize="{Binding Font_Size_2}" FontFamily="{Binding Font_Name_2}" Foreground="{Binding Font_Color_2}" FontStyle="{Binding ElementName=chkItalic_2,Path=IsChecked,Converter={StaticResource FIC}, UpdateSourceTrigger=PropertyChanged}" TextDecorations="{Binding Font_Underline_2,Converter={StaticResource FUC}}" FontWeight="{Binding Font_Bold_2,Converter={StaticResource FVT}}" x:Name="Button_Text_2" MouseLeftButtonUp="Button_Text_2_MouseLeftButtonUp" Grid.RowSpan="3"/> 
     </Canvas> 
     </ContentControl> 
    </Label> 
</Button> 

と私はこのようなuserControl.Resourcesで、このようなスタイルがあります。

<UserControl.Resources> 
<Style x:Key="MyLocalButton" TargetType="Button"> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="Cursor" Value="Hand" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border Name="borderZero" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}" CornerRadius="{Binding AllCorners,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"> 
         <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Opacity" Value="0.8" /> 
         </Trigger> 

        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

<Style x:Key="SomeButtonStyle" TargetType="Button"> 
      <Setter Property="Background" Value="Black" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid Background="{TemplateBinding Background}"> 
          <ContentPresenter /> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
    </Style> 
    </UserControl.Resources> 

これは私のDataModelです:

public class DM_ButtonSettings 
    { 
    public CornerRadius _AllCorners = new CornerRadius(10, 10, 10, 10); 
     public CornerRadius AllCorners 
     { 
      get { return _AllCorners; } 
      set 
      { 
       if (_AllCorners != value) 
       { 
        _AllCorners = value; 

       } 
      } 
     } 
    } 

、これが私のViewModelです:

public class DC_ButtonSettings:INotifyPropertyChanged 
{ 
public CornerRadius _AllCorners = new CornerRadius(10, 10, 10, 10); 
     public CornerRadius AllCorners 
     { 
      get { return _AllCorners; } 
      set 
      { 
       if (_AllCorners != value) 
       { 
        _AllCorners = value; 
        RaisePropertyChangedEvent("AllCorners"); 
       } 
      } 
    } 
} 

私はCornerRadiusという名前のViewModelプロパティを持っていると私は、ユーザーコントロールのローカルresoourcesでスタイルにそれを結合することによって、そのプロパティを使用して、実行時にボタンの角の半径を変更しようとしています。 このViewModelのオブジェクトをButtonが存在するフォームに渡していて、プログラムのロジックに従ってプログラムでCornerRadiusを変更してButtonコーナーの半径を変更しようとしています.ViewModelの値は変更されていますが、更新されていません。私はここで何か非常に単純なものを逃していることを知っていますが、自分で把握することができません。 どうすればいいですか?

答えて

2

私はちょうど&あなたのモードをスタイルからアップデートしました。それは私のために働いています。

<Style x:Key="MyLocalButton" TargetType="Button"> 
       <Setter Property="OverridesDefaultStyle" Value="True" /> 
       <Setter Property="Cursor" Value="Hand" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="Button"> 
          <Border Name="borderZero" BorderThickness="2" BorderBrush="Black" Background="{TemplateBinding Background}" CornerRadius="{Binding AllCorners}"> 
           <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <Setter Property="Opacity" Value="0.8" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
+1

damnnn ...それは私のためにも働いていました: - )....私は間違ったオブジェクトを使用していました...:...)tx Sushil –

関連する問題