我有四个按钮。
当用户点击任何按钮时,我希望其标签中的文字与右侧箭头一样,如下图所示。
有可能吗?
我真正想要的是:
答案 0 :(得分:3)
Button
的内容几乎可以是任何内容。您可以使用WPF的几何图元绘制右箭头,并使用面板将其与文本放在一起。
但是,在您的情况下,使用Webdings字体的TextBlock
额外Run
就足够了:
<Button>
<TextBlock>Bitmaps <Run FontFamily="Webdings">4</Run></TextBlock>
</Button>
我仍然不清楚你在问什么,但让我尝试提供更多信息。
我的意思是使用vb.net或c#而不是xaml?
在WPF中,您通常希望在XAML中设计UI,然后在XAML中命名元素并从代码隐藏中访问或使用数据绑定绑定到视图模型(MVVM样式)。但是,XAML只是用于声明对象图的表示法,如果您愿意,可以在代码中构建该对象图:
var textBlock = new TextBlock();
textBlock.Text = "Bitmaps ";
var run = new Run();
run.Text = "4";
run.FontFamily = new FontFamily("Webdings");
textBlock.Inlines.Add(run);
var button = new Button();
button.Content = textBlock;
与C#版本相比,我发现XAML更容易理解。
如果你真正想做的是拥有一个动态的用户界面而你不知道如何使用XAML实现这一点我在这里演示了如何使用MVVM来实现它。最初,我创建了一个非常简单的视图模型,其中包含要显示的项目:
class ViewModel {
public ViewModel() {
Items = new ObservableCollection<String>();
}
public ObservableCollection<String> Items { get; private set; }
}
在我的代码中,我需要创建视图模型,并将set设置为显示的任何内容的数据上下文(通常是Window,UserControl或Page)。为简单起见,我在窗口的构造函数中执行此操作:
public MainWindow() {
InitializeComponent();
var viewModel = new ViewModel();
viewModel.Items.Add("Computer");
viewModel.Items.Add("SetUp (D:)");
viewModel.Items.Add("DELL Webcam");
viewModel.Items.Add("Bitmaps");
DataContext = viewModel;
}
要显示我使用此XAML的项目列表:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Inlines>
<Run Text="{Binding Mode=OneWay}"/>
<Run Text="4" FontFamily="Webdings"/>
<Run Text=" "/>
</TextBlock.Inlines>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
每个项目都使用TextBlock
和额外的Run
进行渲染,以显示三角形。然后使用StackPanel
水平堆叠项目。
使用ViewModel.Items
实现ObservableCollection<T>
集合,因此在运行时添加或删除项目时,用户界面会相应更新,而无需任何额外的C#代码。所有这些都由WPF中的数据绑定框架处理。