C# ListView内部的Metro XAML绑定
我正在使用下一个代码来显示ListView。ListView包含一个TextBlock,它的FontSize绑定到我的主页上的一个变量:C# ListView内部的Metro XAML绑定,c#,xaml,listview,data-binding,microsoft-metro,C#,Xaml,Listview,Data Binding,Microsoft Metro,我正在使用下一个代码来显示ListView。ListView包含一个TextBlock,它的FontSize绑定到我的主页上的一个变量: <ListView x:Name="ListView" SelectionMode="Single" SelectionChanged="ListView_OnSelectionChanged" Grid.Row="1"
<ListView x:Name="ListView"
SelectionMode="Single"
SelectionChanged="ListView_OnSelectionChanged"
Grid.Row="1"
Margin="8,16"
>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}"
FontSize="{Binding Path=FontSizeListViewTitle}" Margin="6,0,0,0" TextWrapping="NoWrap" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示: FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}” 我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:
文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性 datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示: FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}” 我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:
文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性 datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示: FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}” 我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:
文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性 datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示: FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}” 我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:
文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性 ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是{binding MyList.DisplayName}
或{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性
解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新:
由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是{binding MyList.DisplayName}
或{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性
解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新:
由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是{binding MyList.DisplayName}
或{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性
解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新:
由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是{binding MyList.DisplayName}
或{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性
解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap"
FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新:
由于WinRT中缺少FindAncestor,因此最简单的解决方法是查找ListVie