我嘗試從代碼添加按鈕並向其中添加觸發器和設置器。我wolud喜歡創建這樣的按鈕:wpf - 從代碼添加setter
<Button Height="25" Width="100" Name="TestColorButton" Margin="10, 5, 0, 0">
<TextBlock Text="{Binding Text, ElementName=ColorTextBox}"></TextBlock>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="{Binding Fill, ElementName=NormalRectangle}"/>
<Setter Property="Template"> <!-- I need this setter -->
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{Binding Fill, ElementName=MouseOverRectangle}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{Binding Fill, ElementName=ClickRectangle}"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
我發現如何做除一個setter之外的所有東西。我通過評論檢查了它。我嘗試了很多次,我只有這樣的東西:
ContentPresenter contentPresenter = new ContentPresenter
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
Border border = new Border();
var binding = new Binding("Background");
binding.RelativeSource = new RelativeSource(RelativeSourceMode.Self);
BindingOperations.SetBinding(border, BackgroundProperty, binding);
border.Child = contentPresenter;
ControlTemplate controlTemplate = new ControlTemplate(typeof (Button));
Setter templateSetter = new Setter(TemplateProperty, controlTemplate);
style.Setters.Add(templateSetter);
我知道它不能工作,但我不知道如何做不同。
@Franck對不起,它是。在WPF中的程序代碼中創建UI元素不僅是不好的做法,而且很繁瑣。 OP已經擁有了所需的XAML,他只需要放下程序心態並理解WPF的心態。我不確定我的評論如何「不具有建設性」。 –
這聽起來很積極和迫切,以取消他所做的一切。但是你是對的,因爲它應該保持XAML,但有時你沒有選擇,比如當你的界面完全可定製並保存在數據庫中,並保存爲XAML代碼片段時,如果在其他語言中使用相同的屬性,這些代碼不起作用。 – Franck
我知道這不是一個好習慣,但有沒有另一種方式允許用戶從GUI添加按鈕?我不知道用戶將添加多少個按鈕。 – Eleid