2016-07-27 16 views
2

Ich bin sehr neu zu wpf, und im Moment arbeite ich mit Tasten, und so möchte ich Tastenrand Dicke ändern, aber von Code hinter nicht in XAML, und was ich tat, war als nächstes:Knopfleiste Dicke von Code hinter

var converter = new System.Windows.Media.BrushConverter(); 
var brush = (Brush)converter.ConvertFromString("#83D744"); 
btn0.Background = System.Windows.Media.Brushes.Transparent; // This is applied to button 
     btn0.BorderThickness = new Thickness(1); //Thickness wont apply to button I dont know why 
     btn0.BorderBrush = brush; //This is also applied to button 
+0

Warum Code hinter? –

+0

Die Schaltflächenvorlage legt wahrscheinlich die Randstärke explizit fest. –

+0

Ich denke, der vorgeschlagene Weg könnte sein, diese Eigenschaften an ein Ansichtsmodell zu binden und dann diese verknüpfte korrelierende Eigenschaft zu ändern, anstatt direkt mit dem imperativen Code zu arbeiten. –

Antwort

2

Der Standardrahmenstärke für Buttons 1 ist, so wird sich nichts ändern, wenn Sie es auf 1.

um zu sehen, eine Änderung setzen es einfach etwas anderes festgelegt:

button.BorderThickness = new Thickness(1, 1, 1, 3); 

enter image description here

+0

Aber es sieht nicht so aus, als sei die Stärke der Schaltfläche 1, ich würde sagen, es sieht aus wie 3 oder smth, das ist der Grund, warum ich es auf 1 setzen will, ich werde später Screenshot hochladen und du wirst sehen, wovon ich rede :) –

2

Seit der Vorlage Standardschaltfläche haben Border Eigenschaft nicht, Weitere Informationen, die Sie besuchen können: here. Also, wenn Sie einen Rahmen um Schaltfläche wollen, müssen Sie Ihren eigenen Stil zu verwenden, wie:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="border" BorderBrush="Transparent" BorderThickness="0" Background="Transparent"> 
       <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
      </Border> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

In obigem Code alle Eigenschaften wie: BorderBrush, BorderThickness und Background hart codiert sind, und Sie können diese Eigenschaft nicht festgelegt von Code dahinter. wenn Sie wollen, so müssen Sie schreiben Stil wie:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="border" BorderBrush="{TemplateBinding Property=BorderBrush}" BorderThickness="{TemplateBinding Property=BorderThickness}" Background="{TemplateBinding Property=Background}"> 
       <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
      </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

und wenden diese Art wie:

<Grid> 
    <Button Name="btnNew" Style="{StaticResource ButtonStyle }" Width="200" Height="50" Click="Button_Click" /> 
</Grid> 

Nach dass Sie diese Eigenschaft Border als Ihr Wunsch ändern können, zum Beispiel:

btnNew.Background = Brushes.Black; 
btnNew.BorderThickness = new Thickness(4, 5, 7, 9); 
btnNew.BorderBrush = Brushes.Red; 
+0

Die Standardschaltfläche in WPF hat eine border-Eigenschaft, die nicht hinzugefügt werden muss (https://msdn.microsoft.com/en-us/library/system.windows.controls.button(v=vs.95)). aspx) – 91378246

+0

Definitiv @ 91378246, Button-Klasse hat eine Eigenschaft mit dem Namen 'Border', aber ich spreche über Vorlage. 'ContentPresenter' ist die Sache, die für irgendeinen Inhalt mit in-Button verantwortlich ist und das' ContentPresenter' nicht 'Border' hat. Um die' Border'-Dicke zu ändern, müssen Sie sie zuerst hinzufügen und der einfachste Weg ist 'ContentPresenter' ein 'Border' und spiele damit wie oben. Es kann andere Wege geben, aber das habe ich einfach gefunden. –