标签: relativesource

WPF - Style中的RelativeSource

我的目标是将LabelContent -Property 绑定到应用StyleElements的Tag -Property .但我的解决方案似乎不起作用:


我的风格:

<Style
   TargetType="TextBox"
   x:Key="HintedTextBox">
   <Style.Resources>
      <VisualBrush
         AlignmentX="Left"
         AlignmentY="Center"
         Stretch="None"
         x:Key="HintedTextBox_Hint">
         <VisualBrush.Visual>
            <Label
               Content="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"
               Foreground="LightGray" />
         </VisualBrush.Visual>
      </VisualBrush>
   </Style.Resources>
   <!-- Triggers -->
</Style>
Run Code Online (Sandbox Code Playgroud)

我的文本框:

<TextBox
   Style="{StaticResource ResourceKey=HintedTextBox}"
   x:Name="tbTest" />
Run Code Online (Sandbox Code Playgroud)

wpf xaml binding styles relativesource

10
推荐指数
1
解决办法
9456
查看次数

绑定到当前ItemsSource上下文之外的DataContext

DataSet有义务Window.DataContext; 我还有一个DataGrid:

<DataGrid ItemsSource={Binding Tables[Items]}>
    <DataGrid.Columns>
        <DataGridTextBoxColumn Header={Binding Path=DataContext.Tables[Names]/Test, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}} />
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

基本上,我正在尝试将该列的Header绑定到DataTable"Names",列"Test",第一行.

但是,我无法做到对.请注意,我可以在DataGrid外部绑定它.Grid的ItemsSource更改了数据上下文,我不知道如何在外部引用原始DataContext.

似乎绑定成功了; 但问题是Window.DataContext中Tables [Names]的当前项(第一行)丢失了.

如果我使DataSet静态并通过{x:Static local:dataset}访问它,那么事情就可以了.但我不能使用静态数据集,因为会有多个实例(多用户).

有谁能指出我正确的方向?

data-binding wpf datagrid relativesource itemssource

8
推荐指数
2
解决办法
1万
查看次数

如何通过可视树从ContextMenu menuitem访问控件?

这似乎是一个非常受欢迎的话题,但......

我有以下XAML:

<internal:MyCommandObject x:Name="CommandModel"/>

<Button DockPanel.Dock="Bottom" Command="{Binding DoAction, ElementName=CommandModel}">
    <Button.ContextMenu>
        <ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
            <MenuItem Command="{Binding DoAction, ElementName=CommandModel}"/>
        </ContextMenu>
    </Button.ContextMenu>
    Click Me
</Button>
Run Code Online (Sandbox Code Playgroud)

现在,MyCommandObject是一个从其公开动态命令的控件DataContext.你知道接下来会发生什么.:)

基本上,按钮命令工作正常 - 当我单击它时,DoAction命令就MyCommandObject完美地执行了.但是,menuitem中的命令不会被执行.我尝试过各种手段,例如设置上下文菜单datacontextplacementTarget这样它可以遍历控制等的可视化树,但没有在做.

我需要什么特定的对齐RelativeSourceCommandTarget符文才能使它工作?

wpf xaml binding contextmenu relativesource

6
推荐指数
1
解决办法
3260
查看次数

如何提高RelativeSource FindAncestor的性能?

FindAncestor搜索在窗口的整体视觉树中的元素?

如果是,那么我该如何改进呢?

binding data error,如果我们通过寻找与查找祖先与没有这样的元素存在的元素来访问对象的属性抛出?

如果是,那么我该如何解决这样的错误.

在我的情况下绑定错误抛出输出窗口.为了解决这个错误,我尝试了设置FallbackValue,但现在它给了我警告而不是错误,这是唯一的区别.其他一切都和错误一样.

谁能告诉我究竟是如何FindAncestor运作的?

wpf binding relativesource findancestor

6
推荐指数
1
解决办法
1377
查看次数

RelativeSource FindAncestor问题

这是代码:

<GridViewColumn DisplayMemberBinding="{Binding Path=BookId}" Width="100">
    <GridViewColumn.Header>
        <Border BorderBrush="Black">
            <TextBlock Width="{Binding RelativeSource=
                                       {RelativeSource FindAncestor, 
                                       AncestorType={x:Type GridViewColumn}}, 
                                       Path=Width}" Text="ID">
                <TextBlock.ContextMenu>
                    <ContextMenu>item1</ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
            </Border>
    </GridViewColumn.Header>
</GridViewColumn>
Run Code Online (Sandbox Code Playgroud)

基本上我要做的是使标题中的TextBlock遵循整列的宽度.

它不起作用:文本块的宽度始终与内部文本匹配.有什么想法吗?...提前致谢!

wpf binding listview relativesource

5
推荐指数
1
解决办法
2万
查看次数

是否可以使用AncestorType指向基类型的WPF RelativeSource绑定?

我想将属性绑定到其DataContext中具有ViewModel的父容器视图.

当父是ConcreteClassView的直接实例时,此代码非常有效:

Property="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ty:ConcreteClassView}}, Path=DataContext.Name}"
Run Code Online (Sandbox Code Playgroud)

但是,在尝试通过基类或接口找到父级时,找不到父级.样品:

PropertyB="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ty:BaseClassView}}, Path=DataContext.Name}"

PropertyB="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ty:INamedElementView}}, Path=DataContext.Name}"
Run Code Online (Sandbox Code Playgroud)

给予:

class ConcreteClassView : BaseClassView, INamedElementView { }
Run Code Online (Sandbox Code Playgroud)

好吧,我们假设FindAncestor,AncestorType需要具体类型才能工作.

但是,有什么解决方法可以根据基类或实现给定的接口来定位祖先?

Thxs.

c# wpf binding interface relativesource

5
推荐指数
1
解决办法
3018
查看次数

在构造函数中设置 DataContext=this 和在 WPF 中绑定到 {RelativeSource Self} 之间的区别?

下一个代码按预期工作:

询问窗口.xaml:

<Window
    x:Class='AskWPF.AskWindow'
    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
    >

<DataGrid ItemsSource="{Binding SimpleItems}" />

</Window>
Run Code Online (Sandbox Code Playgroud)

AskWindow.xaml.cs:

namespace AskWPF {

public class SimpleRow {
    private string firstColumn;
    private string secondColumn;

    public SimpleRow(string first, string second) {
        firstColumn = first;
        secondColumn = second;
    }

    public string FirstColumn {
        get { return firstColumn; }
        set { firstColumn = value; }
    }

    public string SecondColumn {
        get { return secondColumn; }
        set { secondColumn = value; }
    }
}

public partial class AskWindow : Window {

    private …
Run Code Online (Sandbox Code Playgroud)

c# wpf datacontext xaml relativesource

5
推荐指数
1
解决办法
9686
查看次数

DataTemplate中的TemplatedParent绑定的Silverlight RelativeSource,是否可能?

我正在尝试制作条形图用户控件.我正在使用a创建每个栏DataTemplate.

问题是为了计算每个条的高度,我首先需要知道它的容器的高度(TemplatedParent).不幸的是我有:

Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" 
Run Code Online (Sandbox Code Playgroud)

不起作用.每次将值NaN返回到我的Converter.RelativeSource={RelativeSource TemplatedParent}在这种情况下不起作用?我还能做些什么来让我的DataTemplate与正在应用的元素"对话"?

这里有帮助,这是准系统DataTemplate:

<DataTemplate x:Key="BarGraphTemplate">
    <Grid Width="30">
        <Rectangle HorizontalAlignment="Center" Stroke="Black" Width="20" Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" VerticalAlignment="Bottom" />
    </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

silverlight wpf binding relativesource

4
推荐指数
1
解决办法
4607
查看次数

WPF:我如何知道Binding RelativeSource是否找到了祖先

我使用的结合RelativeSourceFindAncestor模式,但不正常的约束力.我如何调试并查看它是否能够找到祖先?

data-binding wpf relativesource

4
推荐指数
1
解决办法
940
查看次数

在Itemscontrol数据模板中使用FindAncestor在数据模板之外查找文本块

我有一个绑定到对象的ItemsControl,在ItemsControl的数据模板中,我有两个文本块,我想将第一个文本块的text属性绑定到位于此ItemsControl之外的另一个文本块。

我尝试在父datacontext中查找对象,也尝试使用Path = Text查找TextBlock

下面是一个示例:

 <TextBlock Name="Name" Text="{Binding Name}"                                                            
     Grid.Column="0"   
     FontSize="{DynamicResource SmallSize}"
     TextWrapping="Wrap"
     TextAlignment="Right"
     Padding="4,0,0,0"
     Grid.ColumnSpan="2" Background="Aqua"/>

     <ItemsControl ItemsSource="{Binding TheValue}"                                                  
         Padding="4,0,0,0" 
         Grid.Column="2"  
         HorizontalAlignment="Right">

         <ItemsControl.ItemTemplate>
             <DataTemplate>
                 <WrapPanel>
                     <TextBlock Text = "{
                           Binding RelativeSource = 
                               {RelativeSource FindAncestor, 
                                AncestorType={x:Type Window}}, Path=Name}"                                                                                                            
                           Grid.Column="0"
                           FontSize="{DynamicResource SmallSize}"
                           TextWrapping="Wrap" ........................
Run Code Online (Sandbox Code Playgroud)

wpf relativesource findancestor

4
推荐指数
1
解决办法
8380
查看次数