0

我有四个按钮。

当用户单击任何按钮时,我希望标签中的文本以及右侧箭头如下图所示。

在此处输入图像描述

可能吗?

我真正想要的是:

在此处输入图像描述

4

1 回答 1

3

a 的内容Button几乎可以是任何东西。您可以使用 WPF 的几何图元绘制右箭头,并使用面板将其与文本放在一起。

但是,在您的情况下TextBlock,使用额外Run的 Webdings 字体就足够了:

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

}

在我的代码中,我需要创建视图模型并将其设置为所显示的任何内容(通常是窗口、用户控件或页面)的数据上下文。为简单起见,我在窗口的构造函数中执行此操作:

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>

每个项目都使用 aTextBlock和额外的来呈现Run三角形以显示三角形。然后使用StackPanel.

ViewModel.Items集合是使用实现的,ObservableCollection<T>因此当在运行时添加或删除项目时,用户界面会相应地更新,而无需任何额外的 C# 代码。所有这些都由 WPF 中的数据绑定框架处理。

于 2013-06-09T07:30:09.267 回答