Hier ist ein Beispiel für eine Button
's Margin
arbeitet innerhalb einer Grid
.
Hier ist eine pure XAML
Lösung:
<UserControl x:Class="SO_app.ForRahul"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SO_app"
xmlns:vm="clr-namespace:VM;assembly=VM"//reference to our View Model assembly
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
<vm:MainViewModel/>//setting up the data context of our UserControl
</UserControl.DataContext>
<UserControl.Resources>
<Style TargetType="ToggleButton">//this is the money maker, this style relies on the property of a button but can be easily adapted to Binding with a View Model
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" Value="true">
<Setter Property="Margin" Value="10"/>//sets the margin of a control, you can also put in here "10,10" or "10,10,20,20"
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<ToggleButton Content="Test" />//Button that we modify the Margin
</Grid>
Und hier ist ein Beispiel dafür, wie man es in einem Hauptfenster verwenden: wissen
<Window x:Class="SO_app.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:VM;assembly=VM"
xmlns:local="clr-namespace:SO_app"//this is where our Control resides
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
<Grid>
<Control>
<Control.Template>
<ControlTemplate>
<local:ForRahul/>
</ControlTemplate>
</Control.Template>
</Control>
</Grid>
Wenn Sie weitere Informationen lassen Sie uns brauchen .
Wenn Sie ein Style
verwenden, können Sie es in Ihrer Anwendung wiederverwenden, wenn Sie es in Code tun, dann müssen Sie es entweder static
machen, oder Sie müssen eine Assembly in Ihren Projekten referenzieren.
Annahmen
Ich gehe davon aus, dass Sie nur einen neuen Wert für Ihre Margin benötigen.
UPDATE
Für Ihre Anforderung müssen Sie in der XAML den Wert irgendwo halten, würde ich die App.xaml
wie dies vorschlagen, ist das, was alle Fenster standardmäßig geladen werden, da Sie einen Verweis auf sie wie so haben sollte:
<Thickness x:Key="btnMargin" Left="10" Right="10" Top="10" Bottom="10"/>
Dann, wenn Sie es ändern müssen, basierend auf einem gewissen Logik, die Sie im Code hinter verwenden:
var newMargin = App.Current.Resources["btnMargin"] as Thickness;//get the thickness
var button = grid.Children.OfType<Button>().FirstOrDefault(b => b.Content == "Some Text");//find the correct button
button.Margin = newMargin;
Was bedeutet „kein Erfolg“ bedeuten? Beobachten Sie Fehler im Ausgabefenster? – dymanoid
Spezifischer sein. Stellen Sie eine gute [mcve] bereit, die das Problem zuverlässig reproduziert. _Beschreibe das Problem. Erklären Sie _precely_ly, was der Code tut, was Sie stattdessen tun wollen, und was _specificific__ Sie versucht haben, es zu beheben, und was_spezial_ Sie haben immer noch Schwierigkeiten herauszufinden. –
Ändern Sie den Bindungsmodus in XAML als TwoWay –