我有一个应用程序,在Ribbon控件上设置了超过一百个不同的工具提示.所有的工具提示都会很快弹出(大约半秒钟),我想增加弹出延迟.经过一些研究后,似乎在WPF中执行此操作的唯一方法是通过ToolTipService.InitialShowDelay属性.
我的问题是,我是否必须通过XAML并明确说出来
ToolTipService.InitialShowDelay="2000"
Run Code Online (Sandbox Code Playgroud)
对于每个具有ToolTip的控件?或者是否有某种方法可以使用类似Style的方式全局设置此属性?
谢谢你的任何想法.
让我们说一些抽象的ViewModel基类我有一个普通的属性如下:
public Size Size
{
get { return _size; }
set
{
_size = value;
OnPropertyChanged("Size");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个更具体的ViewModel,继承自前一个,包含以下属性:
public Rect Rectangle
{
get { return new Rect(0, 0, _size.Width, _size.Height); }
}
Run Code Online (Sandbox Code Playgroud)
现在,在一些View类中,我绑定到前面提到的ViewModel的Rectangle属性.一切正常,直到我改变大小.当Size变化,Rectangle不知道它和变化不会传播到视图.因为Rectangle在子类中,我不能简单地添加OnPropertyChanged("Rectangle")到Sizesetter.
现在假设我有许多不同的属性Rectangle,它们都依赖于基类属性,并且没有传播这些更改.我需要一些轻量级和优雅的链接更改通知的方法,最好是不需要大量代码并且不强迫我使用依赖项属性的方法.
显然这里有很多丑陋的解决方案 - 我正在寻找的是干净而聪明的东西.在我看来,这将是一个非常常见的场景,在我看来可能有一种MVVM友好的方式来做到这一点.
我需要沿圆形路径创建一个多步梯度,如下图所示:

有没有人对如何在XAML而不是代码中实现这一点有任何想法?是否可以使用现有的渐变画笔或以某种方式合成它们来实现这种效果?
我的问题与WPF的设计时支持有关.从MSDN我读到,
WPF Designer提供了一个框架和一个公共API,您可以使用它来实现自定义装饰器,工具,属性编辑器和设计器.
但是我发现的绝大多数示例都是微不足道的,并没有说明在现有WPF应用程序中创建自定义设计器的情况.在过去的一年中,我们已将我们的应用程序从Windows Forms迁移到WPF,下一步将采用现有的WinForms Panel设计器,并在WPF中重写它.
我只想说这将是一个巨大的项目.但我甚至不知道从哪里开始.我想知道你们是否有过为WPF应用程序编写自定义设计器的类似经历,以及它是什么样的.更好的是,如果你可以比较和对比WinForms设计师和WPF设计师之间的功能,或解释从前者到后者的过渡,那将是有帮助的.如果您知道任何演示自定义设计环境(使用自定义控件等)的简单示例,那将非常有益.
总而言之,我只是想知道是否有很多人已经开始这样做,以及他们的成果是什么.
编辑:澄清,是的,我在谈论托管WPF设计师.这似乎甚至不可能实现,这是一个巨大的挫折.这是我们当前的WinForms设计师的屏幕截图.如您所见,它用于创建自定义用户界面.您可以将自定义控件拖到其上并进行设计,然后将面板置于"运行模式",其中所有控件都可以正常运行.
没花几个月写我们的设计师,这可能在WPF中可行吗?那么.NET 4.0和VS2010呢?那些会添加任何设计师功能吗?
alt text http://img94.imageshack.us/img94/5378/oldpaneldesigner.png
在更新了所有NuGet包后,我的一个应用程序开始崩溃,启动时出现FileLoadException:
Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
Run Code Online (Sandbox Code Playgroud)
这是在升级ServiceLocation到版本1.3.0.0之后,我仔细检查了所有程序集以确保它们使用该版本.然后我跑去Fuslogvw诊断仍然引用旧版本的程序集:
LOG: DisplayName = Microsoft.Practices.ServiceLocation, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Users/Charlie/AppData/Local/Programs/MyClient/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MyClient.exe
Calling assembly : Microsoft.Practices.Prism.UnityExtensions, Version=5.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
Run Code Online (Sandbox Code Playgroud)
因此,UnityExtensions(另一个NuGet包)仍然引用旧版本.但那应该没问题,因为我已经bindingRedirect在我的app.config文件中添加了一个:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.3.0.0" />
</dependentAssembly> …Run Code Online (Sandbox Code Playgroud) 假设我有一个简短的字符串列表,可以包含重复项:<"A","A","B","B","C","C","D","E","F ">
然后,假设我有一些其他字符串列表,可能是也可能不是原始列表的子集.我需要知道:
因此,在这种情况下,如果我的第二组是列表:<"A","B","C","D","E","F">,我将得到TRUE和2.
如果是列表:<"A","B","C">,我会得到FALSE.
如果我的第一个是<"A","A","A","A","B","B","B","C","C">:
我知道使用嵌套循环可以在N x M时间内轻松完成.但我正在寻找简洁和/或优化的(最好是基于Linq的)解决方案.我使用Linq.Except,但问题是它只返回不同的元素,因此在比较包含重复项的字符串列表时没用.
有人有什么独特的想法吗?