【问题标题】:WPF '_' character in Property-Binding does not work属性绑定中的 WPF '_' 字符不起作用
【发布时间】:2016-02-22 02:32:17
【问题描述】:

在我的 WPF 应用程序的 MainWindow 上,我有一个简单的 listBox,它数据绑定到 ObservableCollection。 ObservableCollection 包含具有一个字符串属性的简单“产品”类的成员。目标是显示存储在 ObservableCollection 的所有产品的“PName”属性中的文本。

MainWindow.xaml:

<Window x:Class="BindingCheck.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:local="clr-namespace:BindingCheck"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ListBox Name="listBox1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Label FontSize="26" Content="{Binding Path=PName}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

MainWindow.Xaml.Cs:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;


namespace BindingCheck
{
    public class Product
    {
        private string pName;

        public string PName
        {
            get { return pName; }
        }

        public Product(string pname)
        {
            pName = pname;
        }
    }
    public partial class MainWindow : Window
    {
        private ObservableCollection<Product> products;
        public MainWindow()
        {
            InitializeComponent();
            products = new ObservableCollection<Product>();
            products.Add(new Product("Toaster"));
            products.Add(new Product("Big_Toaster"));
            products.Add(new Product("Very_Big_Toaster"));
            this.DataContext = products;
        }
    }
}

现在我的问题是:为什么 listBox 输出中只显示第二个 '_' 字符?输出项目应该是:“Toaster”、“Big_Toaster”和“Very_Big_Toaster”,但是我得到了另一个输出:

Output-Items in listBox: Toaster, BigToaster, VeryBig_Toaster

【问题讨论】:

标签: wpf binding


【解决方案1】:

见以下代码:

<StackPanel>
    <Label Content="_first_second" Target="{Binding ElementName=txtbox}"/>
    <TextBox Name="txtbox" Width="100" Height="50"/>
</StackPanel>

现在屏幕为Loaded 后,按“f”键,您将看到Focus 设置在TextBox 中。

因为对于Label,Label 的内容被视为AccessText 这里并根据AccessText 定义第一个''char 表示 Accesskey to 元素和“”不可见。

使用以下链接作为参考:

MSDN on AccessText

AccessText example

【讨论】:

  • 感谢您的回复!在我的情况下,用 TextBlock 替换 DataTemplate 中的 Label 要容易得多(就像前面提到的 swiszcz)。
  • @User95 是的。但你的问题只是为什么会这样?这就是为什么我没有为您的问题放置替代 XAML 的原因..
  • 啊哈好吧。我误解了你的回答。那你是对的;)
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 2011-01-18
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多