天道酬勤,学无止境

WPF DataTemplate 文本块绑定(WPF DataTemplate Textblock binding)

问题

我有一个学生列表框和列表项的数据模板。 DataTemplate 有一个名为 tb 的文本块。 我想将此文本块设置为绑定到 Name 属性。 我怎样才能在外面以 xaml 形式做到这一点? (不是来自数据模板)

<ListBox ItemsSource="{Binding l}"      ItemTemplate="{Binding DataTemplate_L}" Margin="12,70,0,0">

</ListBox>

谢谢

回答1

如果我理解正确,您是在问如何为当前在 DataTemplate 中的文本块设置数据绑定? 您不能在 ListBox 级别设置该数据绑定; 它必须在您的 DataTemplate 中完成。

在这种情况下,DataTemplate 将继承列表中每个项目的 DataContext。

<DataTemplate x:Key="myDataTemplate">
    <StackPanel>
       <TextBlock Text="{Binding Path=Name}" />
       <TextBlock Text="{Binding Path=AnotherListItemProperty}" />
    </StackPanel>
</DataTemplate>

换句话说 - 这个 DataTemplate 是列表中每个项目的模板 - 而 DataContext 将是列表中的每个项目。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何查找 DataTemplate 中的控件并在 WPF 中分配值?(How to Find a Control that is inside DataTemplate & assign Value in WPF?)
    问题 我有一个绑定到网格组标题部分的 DataTemplate。 DataTemplate 中有四个 TextBlock,其中一个 TextBlock 包含 Grid Header Column Value。 现在,我想将此 TextBlock 值拆分为三个,并将此值分配给来自代码隐藏的其他三个 TextBlock。 是否可以? <DataTemplate x:Key="descriptionHeader"> <!--<dxg:GroupGridRowContent> <TextBlock Background="Yellow" Text="{Binding DisplayText}" ></TextBlock> </dxg:GroupGridRowContent>--> <Border BorderBrush="Black" BorderThickness="1" Width="1300"> <StackPanel Orientation="Vertical" Margin="2"> <TextBlock Name="txtdescription" Text="{Binding DisplayText}" Width="200" HorizontalAlignment="Left" ></TextBlock> <StackPanel Orientation="Horizontal
  • WPF文本框与列表的绑定(WPF textblock binding with List<string>)
    问题 有谁知道是否有一种简单的方法将文本块绑定到列表。 到目前为止,我所做的是创建一个列表视图并将其绑定到列表,然后在列表视图中有一个使用单个文本块的模板。 我真正想做的就是将列表绑定到文本块,并显示所有行。 在Winforms中,我可以将List放入其中的“ Lines”属性,但是在WPF文本块或TextBox上看不到它。 有任何想法吗? 我错过了一些简单的事情吗? 这是代码 <UserControl x:Class="QSTClient.Infrastructure.Library.Views.WorkItemLogView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="500" Height="400"> <StackPanel> <ListView ItemsSource="{Binding Path=Logs}" > <ListView.View> <GridView> <GridViewColumn Header="Log Message"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text
  • WPF 数据模板和绑定(WPF DataTemplate and Binding)
    问题 我用MSDN的代码继续我对MVVC的理解,我有一个问题。 在 .xaml 中,它们有一个显示在屏幕上的命令列表。 <Border Grid.Column="0" Style="{StaticResource MainBorderStyle}" Width="170" > <HeaderedContentControl Content="{Binding Path=Commands}" ContentTemplate="{StaticResource CommandsTemplate}" Header="Control Panel" Style="{StaticResource MainHCCStyle}" /> </Border> 从这里,我了解到 DataContext 已设置(此处未显示),它将显示命令集合。 我不明白的是您可以在下面看到的 CommandsTemplate: <DataTemplate x:Key="CommandsTemplate"> <ItemsControl IsTabStop="False" ItemsSource="{Binding}" Margin="6,2"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Margin="2,6">pou <Hyperlink Command="
  • WPF绑定到列表框selectedItem(WPF binding to Listbox selectedItem)
    问题 任何人都可以在以下方面提供帮助-一直在玩这个游戏,但我一生都无法使它正常工作。 我有一个包含以下属性的视图模型; public ObservableCollection<Rule> Rules { get; set; } public Rule SelectedRule { get; set; } 在我的XAML中,我得到了; <ListBox x:Name="lbRules" ItemsSource="{Binding Path=Rules}" SelectedItem="{Binding Path=SelectedRule, Mode=TwoWay}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="Name:" /> <TextBox x:Name="ruleName"> <TextBox.Text> <Binding Path="Name" UpdateSourceTrigger="PropertyChanged" /> </TextBox.Text> </TextBox> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> 现在,ItemsSource可以正常工作
  • 防止 WPF TextBlock 由于 LayoutTransform 而扩展文本(Prevent WPF TextBlock from expanding text due to LayoutTransform)
    问题 我有一个应用程序,我在其中动态地向 Canvas 添加各种实例,并且底层 Canvas 具有缩放 LayoutTransform。 这对于像矩形这样的视觉效果非常有用,它们可以正确地保持固定的笔触宽度,但随着画布使用 LayoutTransform 进行“缩放”,形状的宽度/高度会扩展。 然而,对于 TextBlock 实例,布局转换实际上是缩放文本的渲染,使字体有效地变大。 我希望发生的是 TextBlock 的左上角原点与布局转换一起转换,文本保持相同的大小。 这是用于创建画布的 ItemsControl 的 XAML: <ItemsControl ItemsSource="{Binding Annotations}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemContainerStyle> <Style> <Setter Property="Canvas.Left" Value="{Binding StartX}"/> <Setter Property="Canvas.Top" Value="{Binding StartY}"/> </Style> <
  • WPF转发器(类似)控件用于收集源吗?(WPF Repeater (like) control for collection source?)
    问题 我有一个WPF DataGrid绑定到ObservableCollection 。 我的收藏List<someObject>每个项目都有一个属性,它是一个List<someObject> 。 在我的行详细信息窗格中,我想为该集合中的每个项目写出格式化的文本块。 最终结果将等于: <TextBlock Style="{StaticResource NBBOTextBlockStyle}" HorizontalAlignment="Right"> <TextBlock.Inlines> <Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Name}" /> <Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Price}" /> <LineBreak /> <Run Foreground="LightGray" Text="{Binding Path=Exchanges[0].Quantity}" /> </TextBlock.Inlines> </TextBlock> <TextBlock Style="{StaticResource NBBOTextBlockStyle}"> <TextBlock.Inlines> <Run FontWeight="Bold
  • 在 WPF Tabcontrol 标题模板中显示 SelectedIndex(Show SelectedIndex in WPF Tabcontrol header template)
    问题 我的应用程序中有 1...n 个 tabcontrols,具有以下 XAML 设置: <TabControl Name="ordersTabControl" ItemsSource="{Binding CoilItems}"> <TabControl.ItemTemplate> <DataTemplate DataType="models:Coil"> <StackPanel> <TextBlock Text="{Binding CoilCode, StringFormat='Coil: {0}'}" /> <TextBlock Text="{Binding ArticleCode, StringFormat='Auftrag: {0}'}" /> <TextBlock Text="{Binding RestWeight, StringFormat='Restgewicht: {0} kg'}" /> </StackPanel> </DataTemplate> </TabControl.ItemTemplate> <TabControl.ContentTemplate> [...] </TabControl.ContentTemplate> </TabControl> 打开选项卡的数量在运行时会发生变化。 现在,除了每个标题中已有的信息之外,我还想在每个选项卡中显示一个索引
  • C#/WPF:获取 DataTemplate 中元素的绑定路径(C#/WPF: Get Binding Path of an Element in a DataTemplate)
    问题 如何获取 DataTemplate 中元素的绑定路径? 我的 XAML 看起来像这样: <GridViewColumn Header="Double"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding TotalValues, Mode=OneWay, StringFormat=\{0:0\'0.00\}, Converter={StaticResource GridValueConverter}}" TextAlignment="Right" Width="auto"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Comments" DisplayMemberBinding="{Binding Path=Comments, Mode=OneWay}" Width="auto"/> 获取“普通”GridViewColumnHeader.DisplayMemberBinding 的绑定路径是 var field = (string)((Binding)((GridViewColumnHeader)e.OriginalSource).Column
  • WPF Datagrid标头文本绑定(WPF datagrid header text binding)
    问题 由于某种原因,DataGrid的列标题不是FrameWork元素,因此您不能使用绑定来设置标题文本之类的内容。 如果这与.NET 4.0的更改不对,请更正我(我现在使用的是CodePlex的最新WPFToolkit)。 我正在尝试将DataGrid用于时间表演示文稿,其中日期应作为标题文本的一部分(例如,“ Sun,Nov 01”),并且XAML中包含以下内容: <dg:DataGrid.Columns> <dg:DataGridTextColumn Header="Description" Width="Auto" Binding="{Binding Description}" IsReadOnly="True"/> <dg:DataGridTextColumn Header="Mon" Width="50" Binding="{Binding Allocations[0].Amount}" /> ... every other day of the week .... <dg:DataGridTextColumn Header="Sun" Width="50" Binding="{Binding Allocations[6].Amount}" /> <dg:DataGridTextColumn Header="Total" MinWidth="50" Binding="
  • 在XAML中绑定到WPF DataGridCell的内容时出现问题(Problems binding to a the content of a WPF DataGridCell in XAML)
    问题 我使用以下文章来实现绑定到动态对象列表的数据网格 将DynamicObject绑定到具有自动列生成功能的DataGrid吗? ITypedList方法GetItemProperties可以正常工作,将显示一个网格,其中包含我描述的所有列。 我使用自定义的PropertyDescriptor并覆盖了上面文章中所述的GetValue和SetValue方法,我还在动态对象中实现了TryGetMember和TrySetMember方法。 所以基本上我有一个ComplexObject:DynamicCobject,它具有字段Dictionary和实现ITypedList和IList的ComplexObjectCollection。 除了将DataGrid的itemsSource绑定到集合时,所有这些都工作正常,单元格将显示SimpleObject类型名称,而我实际上想要实现一个模板以在文本块中显示SimpleObject的属性Value。 我已经使用了各种方法来尝试获取基础的SimpleObject,但没有任何效果,并且我总是为该行获取ComplexObject。 我正在使用自动生成的列,这似乎总是产生一个文本列,这可能是问题所在,但是为什么我仍然不能从单元格属性中的某处获取底层的SimpleObject? 下面是我理想的解决方案,但这不起作用。 <Grid> <Grid
  • wpf customControl 绑定项目控件 DataTemplate 按钮(wpf customControl binding itemscontrol DataTemplate button)
    问题 我是 WPF 的新手,所以我在自定义控件单击按钮上遇到了一些绑定问题。 我有具有水印和 selctedItems 属性的文本框。 控制如果 selecteditems != null 在控制中显示它们,如下所示: 图片链接 [http://s29.postimg.org/p25qgqzwn/image.jpg][1] 现在我需要连接 X 按钮以从 selectedItems 源中删除该项目。 我正在尝试在 OnApplyTemplate 方法中执行此操作,但我不知道如何在 itemscontrol 中访问该按钮以附加鼠标单击事件。 我的 Xaml <Style TargetType="{x:Type local:TextBoxPicker}"> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors
  • 如何在 textBlock 上设置点击效果并打开一个新的 WPF 窗口?(How to set a on click effect on a textBlock and open a new WPF window?)
    问题 嗨,我是 WPF 的新手,我正在努力学习它。 所以现在我想知道如何在 ListBox 中的文本块上创建 onclick 效果。 我想单击列表框中的任何项目并打开一个新窗口。 我一定是做错了什么,但我不知道是什么。 到目前为止,我有以下内容。 <Grid> <ItemsControl ItemsSource="{Binding Source={StaticResource cvsRoutes}}"> <ItemsControl.ItemTemplate> <DataTemplate> <Expander Header="{Binding Name}" MinHeight="50"> <ListBox> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBox_MouseLeftButtonDown" /> <TextBlock Text="Something" > <TextBlock.InputBindings> <MouseBinding Command="" MouseAction="LeftClick" /> </TextBlock.InputBindings> </TextBlock> <TextBlock Text="Something" /> <TextBlock Text=
  • Wpf TextBlock中的垂直文本(Vertical Text in Wpf TextBlock)
    问题 是否可以在TextBlock中垂直显示文本,以便所有字母彼此堆叠(不随LayoutTransform一起旋转)? 回答1 还没有人提及使用纯XAML垂直堆叠任意字符串的字母(不旋转它们)的一种明显而琐碎的方法: <ItemsControl ItemsSource="Text goes here, or you could use a binding to a string" /> 通过识别字符串是IEnumerable的事实,这可以简单地垂直布置文本,因此ItemsControl可以将字符串中的每个字符视为一个单独的项目。 ItemsControl的默认面板是StackPanel,因此字符垂直放置。 注意:为了精确控制水平位置,垂直间距等,可以在ItemsControl上设置ItemContainerStyle和ItemTemplate属性。 回答2 以防万一仍然有人碰到这篇文章...这是一个简单的100%xaml解决方案。 <TabControl TabStripPlacement="Left"> <TabItem Header="Tab 1"> <TabItem.LayoutTransform> <RotateTransform Angle="-90"></RotateTransform> </TabItem.LayoutTransform> <TextBlock>
  • 在WPF DataGrid中绑定ComboBoxColumn的ItemsSource(Binding ItemsSource of a ComboBoxColumn in WPF DataGrid)
    问题 我有两个简单的Model类和一个ViewModel ... public class GridItem { public string Name { get; set; } public int CompanyID { get; set; } } public class CompanyItem { public int ID { get; set; } public string Name { get; set; } } public class ViewModel { public ViewModel() { GridItems = new ObservableCollection<GridItem>() { new GridItem() { Name = "Jim", CompanyID = 1 } }; CompanyItems = new ObservableCollection<CompanyItem>() { new CompanyItem() { ID = 1, Name = "Company 1" }, new CompanyItem() { ID = 2, Name = "Company 2" } }; } public ObservableCollection<GridItem> GridItems { get; set; } public
  • WPF 绑定到工具提示(WPF Binding to Tooltip)
    问题 不确定这里做了什么,但绑定适用于数据模板中的标签,但不适用于工具提示。 任何帮助将不胜感激。 <DataTemplate DataType="Label"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <StackPanel.ToolTip> <ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}"> <TextBlock Text="{Binding Path=DataContext.Description}" /> </ToolTip> </StackPanel.ToolTip> <Image Source="{StaticResource ApplicationInfoS}" Margin="0 0 5 0" Stretch="None" HorizontalAlignment="Left" /> <Label Style="{StaticResource lblTextContent}" Padding="5 0 0 0" Content="{Binding Path=DataContext.Description
  • WPF 绑定到父 DataContext(WPF Binding to parent DataContext)
    问题 我们有一个带有标准 MVVM 模式的 WPF 应用程序,利用 Cinch(以及 MefedMVVM)进行 View -> ViewModel 分辨率。 这很有效,我可以将相关控件绑定到 ViewModel 上的属性。 在特定视图中,我们有一个 Infragistics XamGrid。 此网格绑定到 ViewModel 上的 ObservableCollection,并显示适当的行。 但是,然后我在此网格上有一个特定的列,我试图将 TextBox 文本值绑定到父 DataContext 上的属性,而不是 ObservableCollection。 此绑定失败。 我们在这里经历了几个选择,包括: 使用 AncestorType 跟踪树并像这样绑定到父 UserControl 的 DataContext(来自这个问题的好答案,以及这个问题)...... {Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}} 指定 ElementName 并尝试直接定位顶级控件。 如果您想阅读有关使用 ElementName 的信息,请查看此处。 使用 UserControl 资源中定义的“代理”FrameorkElement 尝试根据需要“传入”上下文。
  • 在doubleclick上可编辑的WPF树视图项目? (有样式吗?)(Editable WPF treeview item on doubleclick? (with styles?))
    问题 我有点像WPF菜鸟,因此对于这个问题中的任何固有愚蠢行为深表歉意(!) 我正在尝试通过双击启用WPF树视图标签的编辑-我已对此进行了谷歌搜索,看起来这两种方法是使用自定义控件或隐藏TextBox / TextBlock之一的样式。 使用样式将标签设置为基于数据框的文本框似乎很容易(例如,下面的1),但这意味着选择行的任何时间,它是“被编辑”。 我真正想做的是在mousedoubleclick事件上启用此(转换到文本框),但是似乎EventTriggers不能以下面的方式使用,因为它们是瞬时的。 (似乎我不能简单地在代码隐藏中使用DoubleClick事件,因为那不能(??)允许我影响显示的控件来显示/隐藏文本框)。 使用完全自定义控件似乎是一种替代方法-这里有一个AAALMOST工作示例(http://www.codeproject.com/KB/WPF/editabletextblock.aspx),但是在存在HierachicalDataTemplate子句的情况下,它不起作用(而且看起来还没有解决方案)。 (例如1-选中时从文本块切换到文本框) <Window x:Class="treetest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http
  • WPF绑定:基于属性设置列表框项目文本颜色(WPF binding: Set Listbox Item text color based on property)
    问题 我确定这可能是WPF中的基本知识,但是我不熟悉XAML语法。 设置 我有一个LogItem类型-只是POCO: public class LogItem { public string Message {get;set;} public Color MessageColor {get;set;} } 和我的ViewModel中的LogItem列表: private ObservableCollection<LogItem> _logItems; public ObservableCollection<LogItem> LogItems { get { return _logItems; } set { if (value != _logItems) { _logItems = value; OnPropertyChanged("LogItems"); } } } 我的视图模型已绑定到视图,因此我可以执行以下操作: <ListBox Grid.Row="0" Margin="0,10,0,0" Grid.ColumnSpan="3" Height="150" ItemsSource="{Binding LogItems}"> (显然,我仍然必须设置显示文本绑定等) 问题 鉴于我在LogItems中具有Message和MessageColor属性
  • 强制 TextBlock 在 WPF ListBox 中换行(Force TextBlock to wrap in WPF ListBox)
    问题 我有一个显示消息的 WPF 列表框。 它包含左侧的头像和垂直堆叠在头像右侧的用户名和消息。 布局很好,直到消息文本应该自动换行,但我在列表框中得到了一个水平滚动条。 我已经谷歌搜索并找到了类似问题的解决方案,但没有一个奏效。 <ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=FriendsTimeline}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Border BorderBrush="DarkBlue" BorderThickness="3" CornerRadius="2" Margin="3" > <Image Height="32" Width="32" Source="{Binding Path=User.ProfileImageUrl}"/> </Border> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding Path=User.UserName}"/> <TextBlock Text="{Binding Path=Text}" TextWrapping=
  • WPF DataGrid 单列中的不同编辑控件(WPF DataGrid different edit controls within a single column)
    问题 我正在开发一个 WPF 4.0 应用程序,我需要制作一个网格,其中包含一个带有文本框或下拉列表的列,具体取决于行。 例子: | Name | Value | Help | | PROP1A | [textbox] | Description of prop1a | | Prop2A | [dropdown v] | Description of prop2a | | Prop3A | [textbox] [x checkbox] | Description of prop2a | | Prop4A | [dropdown v] | Description of prop2a | | etc... 这个想法是用户有一个他们需要输入的值表,我们在旁边显示每个值的名称和描述。 有些值是需要用文本框输入的数字,有些是文本框加复选框,还有一些是下拉框。 我最初的想法是将它实现为基本上我称之为RowDescriptor的集合,它将指定名称、输入类型和帮助信息(只是文本),然后使用绑定将集合绑定到 DataGrid。 基本上,这些将充当 ViewModel,并且在 DataGrid 中设置值将通过 ViewModel 向上流动到实际模型(就像在 MVVM 应用程序的典型情况下一样)。 但是,当我查看可用的文档时,我找不到任何讨论像这样动态更改列类型的方法的地方。 我现在倾向于使用 Grid