标签: datatemplate

wpf中控制模板和数据模板之间的区别

有人可以详细说明ControlTemplateDataTemplatewpf 之间的区别吗?

在自定义控件的情况下应该使用什么?比如一个StackPanel可能有一个image和一个TextBox

在某些使用"Content"属性定义自定义控件的情况下,这似乎令人困惑.

如果能够提供如何在不同场景中使用每个场景的示例,那将是很好的.

wpf datatemplate controltemplate

3
推荐指数
1
解决办法
3118
查看次数

当选择ListBoxItem时,如何将焦点设置到ItemTemplate中的控件?

我有一个ListBox,它使用DataTemplate显示对象.DataTemplate包含一个TextBox.当用户选择ListBox中的项目时,我想将焦点设置为所选项目的TextBox.

我已经能够通过处理ListBox.SelectionChanged来部分实现这一点,但它仅在用户单击ListBox以选择项时才有效 - 如果用户选中ListBox并使用箭头键选择项,则它不起作用即使TextBox.Focus()调用.

当用户使用键盘选择项目时,如何将焦点设置到TextBox?

这是ListBox的标记:

<ListBox Name="lb1" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding Items}" >
    <ListBox.ItemTemplate>
        <DataTemplate >
            <TextBox></TextBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

这是处理代码:

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListBoxItem lbi = (ListBoxItem)this.lb1.ItemContainerGenerator.ContainerFromItem(this.lb1.SelectedItem);
    Visual v = GetDescendantByType<TextBox>(lbi);
    TextBox tb = (TextBox)v;
    tb.Focus();
}
Run Code Online (Sandbox Code Playgroud)

wpf focus datatemplate listboxitem

3
推荐指数
1
解决办法
2429
查看次数

将视图模型连接到视图的首选方法是什么?

在使用MVVM的过去,我已经创建了每个View作为DataTemplate其对应的viewmodel来处理连接它们.我刚开始使用MVVM Light,并注意到他们有ViewModelLocator.我看过的其他几个工具包包含了一些变化,但这会带来什么好处DataTemplate呢?

连接Views和ViewModel的最佳做法是什么?

wpf datatemplate mvvm viewmodel viewmodellocator

3
推荐指数
1
解决办法
3567
查看次数

嵌套对象的绑定路径

我刚刚掌握数据绑定,我正在努力绑定到嵌套在对象下方的ObservableCollection中的属性,即在ListView的DataTemplate中我试图绑定到下面的Day.DayDate属性.

它是一个日记应用程序,这是它的结构(编辑,以保持简短):

public class Month : INotifyPropertyChanged
{
    public DateTime StartDate { get; set; }
    public ObservableCollection<Day> Days { get; set; }
}

public class Day : INotifyPropertyChanged
{
    public DateTime DayDate { get; set; }
    public ObservableCollection<Gig> Gigs { get; set; }
}

public class Gig : INotifyPropertyChanged
{
    // Properties of a gig
}
Run Code Online (Sandbox Code Playgroud)

我最初填充像这样的月份日:

private void InitMonth(Month calendarMonth)
{
    // create a Day Object for each day of month, create a gig for each booking on that …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf datatemplate collectionviewsource

3
推荐指数
1
解决办法
7214
查看次数

复合WPF:数据模板与视图模型注入

这是一个简单的问题:您将视图链接到视图模型的用途是什么?

基本上有两种常见的方法来实现,数据模板和视图模型注入(下面的示例).

我想知道的是为什么你喜欢一种方法而不是另一种方法,在这种情况下你使用它们.精确您使用的MVVM框架.


数据模板方式或"View Model first"方法(Resources.xaml):

<DataTemplate DataType="{x:Type my:PersonViewModel}">
    <my:PersonView/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)


视图模型注入方式或"查看第一"方法(PersonView.xaml.cs):

[Import]
public PersonViewModel ViewModel
{
    set
    {
        this.DataContext = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

wpf dependency-injection datatemplate mvvm

3
推荐指数
1
解决办法
3233
查看次数

以编程方式将TextBlock添加到DataTemplate

<DataTemplate>
    <TextBlock x:Name="Txt" Text="{Binding fieldA}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我想以编程方式完成相应的上述XAML(XAML还有更多,我只显示了相关的位).到目前为止我有:

DataTemplate newDataTemplate = new DataTemplate();
TextBlock newTextBlock = new TextBlock();
newTextBlock.SetBinding(TextBlock.TextProperty, new Binding("fieldA"));
newTextBlock.Name = "txt";
Run Code Online (Sandbox Code Playgroud)

那么我现在如何将TextBlock添加到DataTemplate ...即我想做类似的事情:

newDataTemplate.children.Add(TextBlock)
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml datatemplate

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

从DataTemplate绑定ZIndex

我有一个基本上像这样设置的视图:

<Grid>
<ViewBox>
    <Grid>
        <ItemsControl ItemsSource="{Binding MyItems}"
                      ItemTemplate="{Binding Source={StaticResource MyItemsDataTemplate}}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</ViewBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这里使用的DataTemplate可以简化为:

<DataTemplate x:Key="AreaItemDisplayDataTemplate">
<Canvas Grid.ZIndex={Binding Z}>
    <Grid>
        // an shape is displayed here...
    </Grid>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

我现在希望ZIndex绑定到各个项目的Z属性.当我调试代码时,我也可以看到,当我期望它时,访问Z属性getter(每当我为它举起propertychanged事件时),所以我假设绑定工作正常.

但是,ZIndex没有按预期工作.绑定到该值对实际显示的Z Order没有影响.这个代码我哪里错了?

c# wpf xaml binding datatemplate

3
推荐指数
1
解决办法
2130
查看次数

有人知道如何从使用DataTemplate作为列表框项的WPF列表框中删除默认突出显示颜色吗?

有人知道如何从使用DataTemplate作为列表框项的列表框中删除默认突出显示颜色吗?

当我使用ControlTemplate作为我的列表框项样式时,我可以删除样式ok.

wpf listview listbox datatemplate

3
推荐指数
1
解决办法
2712
查看次数

使用DataTrigger将不同的视图应用于同一ViewModel

我有一个ViewModel,我在其中创建了一个bool DisplaySummary属性.如果是这样,SummaryView则使用a来渲染ViewModel,否则DatailedView使用a.

我对如何从这里开始表示怀疑:

<DataTemplate DataType="{x:Type vm:AwesomeViewModel}">
    <ContentControl Content="{Binding}">
        <ContentControl.Style>
            <Style>
                 #### WHAT I SHOULD PUT HERE?
            </Style>
        </ContentControl.Style>
    </ContentControl>
</DataTemplate>

<DataTemplate x:Key="SummaryTemplate">
    <vw:SummaryViewScreen />
</DataTemplate>

<DataTemplate x:Key="DetailedTemplate">
    <vw:DetailedViewScreen />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

编辑:起初我尝试使用DataTemplateSelector,但由于它没有响应PropertyChanged,我不得不使用DataTriggers.

wpf datatrigger datatemplate mvvm

3
推荐指数
1
解决办法
876
查看次数

设置FrameworkElementFactory的字体大小属性

我正在尝试使用FrameworkElementFactory在代码中设置listbox的数据模板,我在数据模板中有一个复选框,我只需要设置复选框的字体大小.

这是代码.

FrameworkElementFactory Name = new FrameworkElementFactory(typeof(CheckBox));
Name.SetBinding(CheckBox.ContentProperty, new Binding("Content"));
Name.SetBinding(CheckBox.IsCheckedProperty, new Binding("BooleanValue"));
Name.SetValue(CheckBox.FontSizeProperty, 20);
stackpnl.AppendChild(columnName);
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我无法设置FontSizeProperty.

出现异常,显示消息20不是字体大小的有效值.

如果此处出现问题,请更正此代码.提前致谢

c# wpf datatemplate

3
推荐指数
1
解决办法
1436
查看次数