2017-07-16 1 views
0

ich eine einfache WPF-Knopf haben, wie unter: -Wie Corner eines wpf Knopfleiste über Stil und Datenbindung setzen

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

und ich habe einen Stil wie dies in UserControl.Resources wie folgt aus:

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

Das ist mein 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; 

       } 
      } 
     } 
    } 

und dies ist mein 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"); 
       } 
      } 
    } 
} 

Ich habe ein Ansichtsmodell Eigenschaft namens Corner und ich versuche, den Radius der Taste Ecken zur Laufzeit zu ändern, die diese Eigenschaft mit, indem es Stil in dem lokalen resoources des Benutzersteuer verbindlich. Ich übergebe ein Objekt dieses ViewModel an das Formular, wo der Button liegt, und versuche, den Button-Eckenradius zu ändern, indem ich den CornerRadius programmatisch entsprechend der Programmlogik ändere. Obwohl die Werte im ViewModel geändert werden, aber die View wird nicht aktualisiert. Ich weiß, dass mir hier etwas sehr Einfaches fehlt, aber ich bin nicht in der Lage, es selbst herauszufinden. Wie mache ich es richtig?

Antwort

2

Ich habe gerade den Modus & updatesourcetrigger aus dem Stil entfernt. es funktioniert für mich.

<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 ... es funktionierte auch für mich ...: -) .... ich benutzte das falsche Objekt ...: -) ... tx Sushil –