C#:如何在虚拟模式下有效过滤(隐藏)ListView 项目?
我正在寻找一种在虚拟模式下过滤(隐藏/显示)ListView 中的项目的方法。我将我的项目缓存在列表视图项目数组中,如何有效地使其在按下过滤按钮时仅显示特定的列表视图项目,然后在按下非过滤按钮时将所有项目返回?
wxPython ToolBar外观与当前操作系统的外观不匹配 - 它具有类似于Windows Vista/7菜单栏IE的渐变色渐变色.
有没有办法改变它,以便它与操作系统的外观和感觉融为一体?
注意:创建ToolBar时可以设置样式标志,其中一个标志是wx.TB_FLAT,但这似乎对ToolBar的渲染方式没有影响.
我在Windows 7上运行我的wxPython程序.
编辑:下面是我看到的屏幕截图.

编辑:似乎工具栏是根据当前主题绘制的,因为更改为Windows经典主题会呈现与窗口背景匹配的平面工具栏.
下面的代码显示了我到目前为止所尝试的内容.我创建了一个名为OnPaint的方法,它绑定到工具栏绘制事件.这没有任何效果,工具栏如上图所示绘制.
我知道,如果我将此方法绑定到Windows绘制事件而不是工具栏,则OnPaint中的代码将作为矩形呈现.
import wx
ID_STAT = 1
ID_TOOL = 2
class CheckMenuItem(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(350, 250))
menubar = wx.MenuBar()
file = wx.Menu()
view = wx.Menu()
self.shst = view.Append(ID_STAT, 'Show statubar', 'Show Statusbar', kind=wx.ITEM_CHECK)
self.shtl = view.Append(ID_TOOL, 'Show toolbar', 'Show Toolbar', kind=wx.ITEM_CHECK)
view.Check(ID_STAT, True)
view.Check(ID_TOOL, True)
self.Bind(wx.EVT_MENU, self.ToggleStatusBar, id=ID_STAT)
self.Bind(wx.EVT_MENU, self.ToggleToolBar, id=ID_TOOL)
menubar.Append(file, '&File')
menubar.Append(view, '&View')
self.SetMenuBar(menubar)
self.toolbar = self.CreateToolBar()
self.toolbar.Realize()
self.statusbar = …Run Code Online (Sandbox Code Playgroud) 我有一个自定义ControlTemplate用于WPF TabControl,它在TabItem标题的左侧和右侧添加了按钮.目前这不是命名部分,因为按钮命令绑定在ControlTemplates XAML中,不需要在ControlTemplate之外公开.
这适用于按钮,但如果我想将内容添加到TabItemHeaders的左侧(或右侧),可以绑定到ControlTemplate之外,以便我的TabControl变得更灵活,该怎么办?
我的想法是继承TabControl并在ControlTemplate中有两个命名部分,并将它们作为新控件的属性公开; CustomTabControl.LeftContentArea和CustomTabControl.RightContentArea分别.每个命名的部分都是一个ContentPresenter,每个ContentPresenters Content属性都由上面提到的属性公开.
但是,当我尝试这个时,我无法将内容放入左右内容区域.
编辑:为了清楚我已经包含了一个图像.红色矩形显示我希望能够放置额外内容的位置.

更新:下面是我到目前为止取得的进展的屏幕截图,希望这将有助于解释我的问题.
屏幕截图显示了我的自定义选项卡控件,其中有两个空白选项卡和三个当前位于TabItem标题区域右侧的按钮.这些按钮当前在TabControls自定义ControlTemplate IE中定义,ControlTemplates Grid中有一个ColumnDefinition,它包含一个托管3个按钮的StackPanel.

我正在寻找的是一种允许选项卡控件的消费者决定选项卡旁边区域内容的内容的方法.EG用户应该能够做到这样的事情:
<local:CustomTabControl>
<local:CustomTabControl.RightContentArea>
<!-- This can be changed to ANY content that the user wants -->
<StackPanel Orientation="Horizontal">
<Button Content="Test" />
<Button Content="Test" />
<Button Content="Test" />
</StackPanel>
</local:CustomTabControl.RightContentArea>
<!-- TabItems are added as normal -->
<TabItem Header="Tab One" />
<TabItem Header="Tab Two" />
</local:CustomTabControl>
Run Code Online (Sandbox Code Playgroud) 我想将小部件插入到我的内容中ItemsControl并使它们可以调整大小.我该如何实现这一目标?
这是我的XAML:
<ItemsControl ItemsSource="{Binding TestForList, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="5"
BorderThickness="1"
BorderBrush="Black">
<TextBlock FontSize="100" Text="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
哪个绑定到:
public List<string> TestForList
{
get
{
return new List<string> { "A", "B", "C" };
}
}
Run Code Online (Sandbox Code Playgroud)
我想以某种方式在项目之间添加分割器,以便可以调整它们的大小.有没有内置的功能来实现这一目标?

我有一个ASP.Net应用程序,它有一个名为'Customers'的区域.该区域有一个名称相同的控制器,只有一个名为Index的方法.
我定义了以下路线:
context.MapRoute(null,
"Customers/{controller}/{action}",
new { controller = "customers", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
这允许我导航以使用以下URL导航到我的Customers控制器上的索引方法.
MYDOMAIN /客户
在我的客户区域,我还有另一个叫做产品的控制器.这有许多方法可以让我使用产品实体(目前主要由Visual Studio自动生成).
使用我当前的路线,我可以使用以下URL链接到产品控制器:
MyDomain/Customers/Products(显示产品控制器的索引页面)MyDomain/Customers/Products/Create(显示添加新产品的页面).MyDomain/Customers/Products/Details?id = 1234(显示ID为1234的产品)
现在我想要做的是导航到详细信息页面,其中包含更加用户友好的URL,例如:
MYDOMAIN /客户/产品/ 1234
我已经定义了一个如下所示的新路由:
context.MapRoute(null,
"Customers/Products/{id}",
new { controller = "Products", action = "Details" }
);
Run Code Online (Sandbox Code Playgroud)
路线在我演示的第一条路线之前定义.这允许我根据需要导航到产品页面,但是我无法再导航到我的产品控制器上的其他方法.
EG以下URL
MYDOMAIN /客户/产品/创建
给我以下错误:
参数字典包含方法'System.Web.Mvc.ViewResult Details(Int32)'的非可空类型'System.Int32'的参数'id'的空条目
如果我更改路由的顺序,那么我可以导航到我的产品控制器上的所有方法,但我的详细信息URL将恢复为具有查询参数的旧格式.
如果我更新路线看起来像这样:
context.MapRoute(null,
"Customers/Products/{id}",
new { controller = "Products", action = "Details", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然后我仍然遇到同样的问题.
谁能告诉我如何构建我的路线以获得我想要的结果?综上所述:
我有一个Silverlight应用程序,显示一个项目列表ListBox.每个项目代表我的应用程序的不同"页面",所以我有一个应用于ItemContainerStyle属性的样式,如下所示:
<Style x:Key="navigationItemContainerStyle" TargetType="ListBoxItem">
<Setter Property="Margin" Value="5,3"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Cursor="Hand">
<VisualStateManager.VisualStateGroups>
<!-- code omitted --!>
</VisualStateManager.VisualStateGroups>
<Border x:Name="contentBorder"
Background="{StaticResource navigationHighlightBrush}"
CornerRadius="3"
Opacity="0"/>
<ContentControl x:Name="content"
Margin="10,5"
Content="{Binding}"
Foreground="DarkGray"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
风格很简单.它仅仅是显示Border当ListBoxItem的视觉状态等于'选定’.请注意,内容由a托管,ContentControl因为我希望能够Foreground在项目处于"已选择"状态时更改属性.
这可以很好地工作,如下面的屏幕截图所示:

现在我希望所选项目调用导航,所以我的想法是创建一个DataTemplate将每个项目的内容设置为HyperLinkButton:
<DataTemplate x:Key="navigationListBoxItemTemplate">
<HyperlinkButton Content="{Binding}"
Background="Transparent"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
现在这不能作为ItemTemplate主机的内容ContentControl而不是一样,ContentPresenter所以我必须更新ListBoxItem模板才能使用ContentPresenter.
<ContentPresenter x:Name="content" Margin="10,5"/>
Run Code Online (Sandbox Code Playgroud)
我现在得到以下结果:

当我在点击HyperLinkButton …
我试图在 JavaFX 中将选项卡居中,TabPane但似乎无法达到预期的结果。
使用 CSS 参考,我能够定位TabPane控件子结构的各个部分,但无论我尝试什么,我都无法将选项卡水平居中放置在标题中。
到目前为止,我拥有的 CSS 如下:
.tab-pane > .tab-header-area > .headers-region {
-fx-border-color: red;
-fx-border-width: 3;
-fx-alignment: CENTER;
}
.tab-pane > .tab-header-area > .tab-header-background {
-fx-border-color: blue;
-fx-border-width: 3;
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:

如您所见,彩色边框表明我正确选择了 的子结构,TabPane但该-fx-alignment属性似乎没有效果。
是否可以使用 CSS 在标题中水平居中选项卡,如果可以,我需要设置哪个属性以及我需要定位子结构的哪个部分?
我正在尝试创建一个 proc 返回一个自定义元组,其中包含一个 proc 类型的单个元素,即
type
CustomTuple = tuple
foo: proc(input: int): int
proc createCustomTuple(): CustomTuple =
(foo: proc(input: int): int = 10)
Run Code Online (Sandbox Code Playgroud)
但是,当我编译它时,我收到以下错误(我在 Windows 上使用 Nim 1.2.6 版进行编译)。
错误:类型不匹配:得到 <tuple[foo: proc (input: int): int{.noSideEffect, gcsafe, locks: 0.}]> 但预期为 'CustomTuple = tuple[foo: proc (input: int): int{ 。关闭。}]'
所以编译器认为我返回的是一个普通的元组而不是一个,CustomTuple但我不知道如何改变它以使其工作。Nim 手册中元组的文档显示自定义元组是按照我的方式构造的,我找不到任何从 proc 返回自定义元组的示例。
如果我更改我的CustomTuple定义以包含不是 procs 的类型,那么它会成功编译,因此它似乎可以执行我的自定义元组,其中包含导致无法编译的 proc。
谁能解释为什么上面的代码没有编译?
我刚刚遇到了一些看起来像这样的 Haskell 代码:
(functionOne, functionTwo)
| someCondition = (10, "Ten")
| otherwise = (20, "Twenty")
Run Code Online (Sandbox Code Playgroud)
从代码的使用方式来看,我想我理解这段代码的意图,即它只是一种更简洁的写法:
functionOne
| someCondition = 10
| otherwise = 20
functionTwo
| someCondition = "Ten"
| otherwise = "Twenty"
Run Code Online (Sandbox Code Playgroud)
但是,我不记得以前见过以这种方式编写的函数,也不知道这种技术被称为什么,因此无法搜索有关此的任何其他信息。
所以我的问题是:
为什么每当我必须使用awakeFromNib协议时,我必须将它放在这种格式中?
-(void)awakeFromNib
Run Code Online (Sandbox Code Playgroud)
有什么需要 - (无效)?
c# ×5
wpf ×3
tuples ×2
xaml ×2
.net ×1
asp.net-mvc ×1
datatemplate ×1
haskell ×1
java ×1
javafx ×1
javafx-8 ×1
layout ×1
listview ×1
nim-lang ×1
objective-c ×1
python ×1
silverlight ×1
styles ×1
wpf-controls ×1
wxpython ×1
xcode ×1