一起使用webdings和字母表

时间:2013-06-09 06:57:06

标签: c# wpf vb.net character

我有四个按钮。

当用户点击任何按钮时,我希望其标签中的文字与右侧箭头一样,如下图所示。

enter image description here

有可能吗?

我真正想要的是:

enter image description here

1 个答案:

答案 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中的数据绑定框架处理。