【问题标题】:Apply style to one child element of a custom panel?将样式应用于自定义面板的一个子元素?
【发布时间】:2016-08-22 07:53:08
【问题描述】:

我自己实现了一个自定义面板(主要处理项目的网格布局,具体取决于它们的大小和面板大小)。

我必须能够在项目之间“导航”(使用键盘箭头)并为其中一个项目提供视觉风格。

目前我能够获得应该突出显示的UIElement,但我不知道:

  • 如何应用样式?
  • 应用哪种样式?由于我不知道包含什么样的元素,所以我想也许可以在光标周围应用一些边框

知道如何进行吗?

如果有帮助的话,我还必须“关注”这个元素

【问题讨论】:

  • 您可以将该自定义面板用作 ListBox 的 ItemsPanel。 ListBox 允许选择 1 个或多个元素(为每个数据项创建一个 ItemContainer (ListBoxItem)),因此您也可以自定义选定的 ListBoxItem 样式
  • @ASh 这似乎是个好主意!你在哪里处理键盘按键?你应该用你的提议来回答

标签: wpf xaml layout win-universal-app panel


【解决方案1】:

UIElement类型没有样式的概念,Style是FrameworkElement上定义的一个属性,它派生自UIElement,为WPF元素提供了一组属性、事件和方法。

如果您可以将 UIElement 转换为 FrameworkElement,您可以应用这样的样式

FrameworkElement frameworkElement = uiElement as FrameworkElement;

if (frameworkElement != null)
{
    frameworkElement.Style = myStyle;
}

【讨论】:

  • 好的,我可以这样做,但是要应用什么样式?因为我只知道这是一个FrameworkElement?我对它周围的房产了解不多
  • 如果你想手动给它应用一个样式,你必须知道你的样式是什么,否则整个想法毫无意义。您可以获取元素的类型并使用它来查找针对该类型的样式..
【解决方案2】:

您可以将自定义面板用作 ListBox 的 ItemsPanel,例如

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

在这里找到的想法ItemsControl: A-Z chapter I

ListBox 将项目包装到 ListBoxItem 容器中,并支持(开箱即用)选择(1 个或多个项目)和选定项目突出显示(可以使用新样式自定义)。所有箭头键也可以使用。

【讨论】:

  • 我会尝试,但我不确定箭头键如何与网格布局一起使用(意味着上下应该改变行,左右应该改变列)
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 2018-05-19
  • 1970-01-01
  • 2017-07-09
  • 2016-12-20
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多