查找样式模板中的控件

风之雨 2016-12-13 09:59:14
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="sp" BorderThickness="2" BorderBrush="Black" CornerRadius="5">
<Grid Width="{Binding ElementName=sp,Path=ActualWidth}" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="txtDishesName" Grid.ColumnSpan="3" Background="Transparent" FontSize="{Binding DishesFontSize}" FontWeight="Bold" VerticalAlignment="Center"
HorizontalAlignment="Center" Visibility="{Binding IsDishesName}"/>
<Separator Grid.Row="1" Grid.ColumnSpan="4" VerticalAlignment="Bottom" Visibility="{Binding IsShowTableVisibility}"/>

<Border Background="#A0A0A0" Width="1" Grid.Row="2" Grid.RowSpan="2" HorizontalAlignment="Right" Margin="0,-2,0,0" Visibility="{Binding IsShowTableVisibility}"/>
<Border Background="#A0A0A0" Width="1" Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" HorizontalAlignment="Left" Margin="0,-2,0,0" Visibility="{Binding IsShowTableVisibility}"/>

<TextBlock Name="txtWaiDai" Grid.Row="2" Grid.Column="0" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding IsTakeawayQty}" FontSize="{Binding fintTakeawayQtyFontSize}"/>
<TextBlock Name="txtfnumNextQty" Grid.Row="2" Grid.Column="1" Foreground="Red" FontSize="{Binding fintFQtyFontSize}"
FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding IsFQty}"/>
<TextBlock Name="txtfvchrPractice" Grid.Row="2" Grid.Column="2" FontSize="{Binding fintPracticeFontSize}" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"
Visibility="{Binding IsPracticeVisibility}"/>

<Separator Grid.Row="3" Grid.ColumnSpan="4" VerticalAlignment="Top" Name="spt" Visibility="{Binding IsShowTableVisibility}"/>

<TextBlock Name="txtCuiCai" Grid.Row="3" Grid.Column="0" FontSize="{Binding fintReminderCountFontSize}" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding IsReminderCountVisibility}"/>
<TextBlock Name="txtfnumQty" Grid.Row="3" Grid.Column="2" Text="{Binding fvchrQty}" FontSize="{Binding fintPrintQtyFontSize}" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding IsPrintQty}"/>
<TextBlock Name="txtfvchrModel" Grid.Row="3" Grid.Column="1" FontSize="{Binding fintModelFontSize}" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" FontWeight="Bold"
TextTrimming="CharacterEllipsis" Visibility="{Binding IsUnitVisibility}"/>

<Border x:Name="bg" Grid.ColumnSpan="3" Visibility="Collapsed" Grid.RowSpan="4" Width="{Binding ElementName=sp,Path=ActualWidth}" Height="{Binding ElementName=sp,Path=ActualHeight}" Background="#00CD00" Opacity="0.6"/>
</Grid>
</Border>
</Setter.Value>
</Setter>
</Style>



<ListBox x:Name="lstDishes" ItemsSource="{Binding ShowDishesList}" ItemContainerStyle="{StaticResource PlanListBoxItemContainerStyle}" BorderThickness="0"
IsTabStop="False">
<ListBox.Template>
<ControlTemplate TargetType="{x:Type ListBox}">
<WrapPanel Orientation="Horizontal" IsItemsHost="True" />
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<Button x:Name="btnPrint" Width="{Binding Converter={StaticResource widthConverter}}" Height="{Binding Converter={StaticResource heightConverter}}"
Style="{StaticResource ButtonStyle}" >
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
怎么查找上面样式中的TextBlock控件?知道的朋友帮帮忙,谢谢。
...全文
1010 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhierzhao2795 2017-02-07
  • 打赏
  • 举报
回复
请确保Loaded之后调用
zhierzhao2795 2017-02-07
  • 打赏
  • 举报
回复
/// <summary> /// 获得指定元素的所有子元素 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public List<T> GetChildObjects<T>(DependencyObject obj) where T : FrameworkElement { DependencyObject child = null; List<T> childList = new List<T>(); for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++) { child = VisualTreeHelper.GetChild(obj, i); if (child is T) { childList.Add((T)child); } childList.AddRange(GetChildObjects<T>(child)); } return childList; }
风之雨 2016-12-13
  • 打赏
  • 举报
回复
引用 3 楼 Libby1984 的回复:
这么多的TextBlock你想要哪一个?干嘛用的呢? 如果你硬要获得的话,你可以使用命中测试,然后遍历命中测试中的命中结果找到TextBlock HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt); if (result != null) { // Perform action on hit visual object. } 但是如果你想修改模板样式中的某些内容,最好还是用绑定。
普通的绑定解决不了我的问题,我要的是首先获取到控件,然后再动态给这个控件绑定字段
  • 打赏
  • 举报
回复
这么多的TextBlock你想要哪一个?干嘛用的呢? 如果你硬要获得的话,你可以使用命中测试,然后遍历命中测试中的命中结果找到TextBlock HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt); if (result != null) { // Perform action on hit visual object. } 但是如果你想修改模板样式中的某些内容,最好还是用绑定。
风之雨 2016-12-13
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
http://blog.csdn.net/duanzi_peng/article/details/17094639
这些方法找不到。
  • 打赏
  • 举报
回复
引用 4 楼 WesLonloveJall 的回复:
[quote=引用 3 楼 Libby1984 的回复:] 这么多的TextBlock你想要哪一个?干嘛用的呢? 如果你硬要获得的话,你可以使用命中测试,然后遍历命中测试中的命中结果找到TextBlock HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt); if (result != null) { // Perform action on hit visual object. } 但是如果你想修改模板样式中的某些内容,最好还是用绑定。
普通的绑定解决不了我的问题,我要的是首先获取到控件,然后再动态给这个控件绑定字段[/quote] 那你试试我上面的代码,看应该能满足你的需求
  • 打赏
  • 举报
回复
RelativeSource ListBoxItem -> RelativeSource AncestorType=ListBoxItem
  • 打赏
  • 举报
回复
引用 2 楼 WesLonloveJall 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] http://blog.csdn.net/duanzi_peng/article/details/17094639
这些方法找不到。[/quote] 用绑定。如果 DishesFontSize 属性属于listboxitem的DataContext的一个属性,那么就可以使用 绑定方式,使用RelativeSource,指定要查询的祖先元素为ListBoxtItem. 类似: FontSize="{Binding DataContext.DishesFontSize,RelativeSource={RelativeSource ListBoxItem}}"

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧