首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComponentResourceKey表示ListViewItem

ComponentResourceKey表示ListViewItem
EN

Stack Overflow用户
提问于 2019-01-07 10:33:11
回答 1查看 61关注 0票数 0

首先,我正在尝试获取ListView的行详细信息(就像ListView)功能,并且我使用了以下方法:

gridview-equivalent-of-the-datagrids-row-details-template

自定义功能在此处定义为

代码语言:javascript
复制
public class GridViewWithRowDetails : GridView
{
    public static DataTemplate GetRowDetailsTemplate(DependencyObject obj)
    {
        return (DataTemplate)obj.GetValue(RowDetailsTemplateProperty);
    }

    public static void SetRowDetailsTemplate(DependencyObject obj, DataTemplate value)
    {
        obj.SetValue(RowDetailsTemplateProperty, value);
    }

    public static readonly DependencyProperty RowDetailsTemplateProperty =
        DependencyProperty.RegisterAttached("RowDetailsTemplate", typeof(DataTemplate), typeof(GridViewWithRowDetails), new UIPropertyMetadata());


    protected override void PrepareItem(ListViewItem item)
    {
        base.PrepareItem(item);
        item.SetValue(RowDetailsTemplateProperty, this.GetValue(RowDetailsTemplateProperty));

    }

    protected override object ItemContainerDefaultStyleKey
    {
        get
        {
            return new ComponentResourceKey(this.GetType(), "ItemContainerStyleKey");
        }
    }
}

和主要风格:

代码语言:javascript
复制
<Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type themes:GridViewWithRowDetails}, 
       ResourceId=ItemContainerStyleKey}"
       TargetType="{x:Type ListViewItem}">

现有内容的定义如下:

代码语言:javascript
复制
<ContentPresenter ContentTemplate="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}, Path=(themes:GridViewWithRowDetails.RowDetailsTemplate), Mode=TwoWay}" 
                                              Visibility="Visible"
                                              Grid.Row="2" 
                                              Content="{TemplateBinding Content}"/>

我已经将可见性设置为“可见的”,以确保没有绑定问题会干扰。

我就是这样用的:

代码语言:javascript
复制
<themes:GridViewWithRowDetails>
    <themes:GridViewWithRowDetails.RowDetailsTemplate>
         <DataTemplate>
               <StackPanel Background="Black">
                      <TextBox Margin="10, 2" Text="text"/>
               </StackPanel>
          </DataTemplate>
    </themes:GridViewWithRowDetails.RowDetailsTemplate>

     <themes:GridViewWithRowDetails.Columns>
     ..........................
     </themes:GridViewWithRowDetails.Columns>

</themes:GridViewWithRowDetails>

我的项目是为wpf自定义控件设置的,它包含程序集: ThemeInfo部分。

我不能用

代码语言:javascript
复制
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), 
        new FrameworkPropertyMetadata(typeof(MyCustomControl)));

这似乎解决了其他人的这个问题,因为GridViewWithRowDetails类是从GridView派生的,因此缺乏DefaultStyleKeyProperty。

我认为DefaultStyleKeyProperty是为基于控件的类定义的。

我必须指出,如果我在MainApp上做了所有这一切,它就能正常工作。

如有任何提示,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 14:25:55

好的,所以MahApps在碰撞。在我的主要应用程序的App.xaml中

代码语言:javascript
复制
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />

我删除了它,而是定义了一个具有以下内容的新字典:

代码语言:javascript
复制
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.ListView.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Scrollbars.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Buttons.xaml" />

    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.CheckBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.ComboBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.ContextMenu.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.PasswordBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.ProgressBar.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.RadioButton.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Slider.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.TabControl.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.TextBlock.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.TextBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Tooltip.xaml" />
</ResourceDictionary.MergedDictionaries>

<ControlTemplate x:Key="ValidationToolTipTemplate">
    <Grid x:Name="Root" Margin="5,0" Opacity="0" RenderTransformOrigin="0,0">
        <Grid.RenderTransform>
            <TranslateTransform x:Name="xform" X="-25" />
        </Grid.RenderTransform>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="OpenStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0" />
                    <VisualTransition GeneratedDuration="0:0:0.2" To="Open">
                        <Storyboard>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="X" Storyboard.TargetName="xform">
                                <SplineDoubleKeyFrame KeyTime="0:0:0.2" Value="0" />
                            </DoubleAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root">
                                <SplineDoubleKeyFrame KeyTime="0:0:0.2" Value="1" />
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Closed">
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root">
                            <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Open">
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="X" Storyboard.TargetName="xform">
                            <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                        </DoubleAnimationUsingKeyFrames>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root">
                            <SplineDoubleKeyFrame KeyTime="0" Value="1" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Border Background="{DynamicResource ValidationBrush1}" CornerRadius="5" Margin="4,4,-4,-4" />
        <Border Background="{DynamicResource ValidationBrush2}" CornerRadius="4" Margin="3,3,-3,-3" />
        <Border Background="{DynamicResource ValidationBrush3}" CornerRadius="3" Margin="2,2,-2,-2" />
        <Border Background="{DynamicResource ValidationBrush4}" CornerRadius="2" Margin="1,1,-1,-1" />
        <Border Background="{DynamicResource ValidationBrush5}" CornerRadius="2" /> 
        <Border CornerRadius="2">
            <TextBlock Foreground="{DynamicResource WhiteColorBrush}"
                       MaxWidth="250"
                       Margin="8,4,8,4"
                       TextWrapping="Wrap"
                       Text="{Binding (Validation.Errors)[0].ErrorContent}"
                       UseLayoutRounding="false" />
        </Border>
    </Grid>
</ControlTemplate>

   <Style TargetType="ToolTip" BasedOn="{StaticResource MetroToolTip}" />
   <Style TargetType="Button" BasedOn="{StaticResource MetroButton}" />
   <Style TargetType="ToggleButton" BasedOn="{StaticResource MetroToggleButton}" />
   <Style TargetType="TextBox" BasedOn="{StaticResource MetroTextBox}" />
   <Style TargetType="Slider" BasedOn="{StaticResource MetroSlider}" />
   <Style TargetType="TextBlock" BasedOn="{StaticResource MetroTextBlock}" />
   <Style TargetType="TabItem" BasedOn="{StaticResource MetroTabItem}"  />
   <Style TargetType="TabControl" BasedOn="{StaticResource MetroTabControl}" />
   <!--<Style TargetType="ScrollBar" BasedOn="{StaticResource MetroScrollBar}" />-->
   <Style TargetType="RadioButton" BasedOn="{StaticResource MetroRadioButton}" />
   <Style TargetType="ProgressBar" BasedOn="{StaticResource MetroProgressBar}" />
   <Style TargetType="PasswordBox" BasedOn="{StaticResource MetroPasswordBox}" />
   <Style TargetType="CheckBox" BasedOn="{StaticResource MetroCheckBox}" />
   <Style TargetType="ComboBox" BasedOn="{StaticResource MetroComboBox}" />
   <Style TargetType="ComboBoxItem" BasedOn="{StaticResource MetroComboBoxItem}" />
   <Style TargetType="MenuItem" BasedOn="{StaticResource MetroMenuItem}" />
   <Style TargetType="ContextMenu" BasedOn="{StaticResource MetroContextMenu}" />
</ResourceDictionary>

无论如何,这是一件奇怪的事情,因为ListView.xaml还在那里,但我将继续研究这个问题。目前,我有一个有用的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54072644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档