给定StackPanel:
<StackPanel>
<TextBox Height="30">Apple</TextBox>
<TextBox Height="80">Banana</TextBox>
<TextBox Height="120">Cherry</TextBox>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
即使子元素本身具有不同的大小,将子元素间隔开来以使它们之间存在大小相等的间隙的最佳方法是什么?可以在没有为每个孩子设置属性的情况下完成吗?
该Rectangle
元素StrokeDashArray
允许用虚线绘制,但它不支持圆角.该Border
控件支持带圆角的漂亮粗线,但仅绘制实线.
通过任何控制实现带圆角的虚线边框的最佳方法是什么?
虚线边框示例http://img524.imageshack.us/img524/3186/dashedborder.png
我希望HashSet<T>
用作词典的关键:
Dictionary<HashSet<T>, TValue> myDictionary = new Dictionary<HashSet<T>, TValue>();
Run Code Online (Sandbox Code Playgroud)
我想从字典中查找值,HashSet<T>
以便包含相同项的两个不同实例将返回相同的值.
HashSet<T>
的实现Equals()
和GetHashCode()
似乎并没有这样做(我认为它们只是默认值).我可以覆盖Equals()
使用SetEquals()
但是怎么样GetHashCode()
?我觉得我在这里错过了一些东西......
我有以下类,它是一个IDisposable
对象的装饰器(我省略了它添加的东西),它本身IDisposable
使用一个通用模式实现:
public class DisposableDecorator : IDisposable
{
private readonly IDisposable _innerDisposable;
public DisposableDecorator(IDisposable innerDisposable)
{
_innerDisposable = innerDisposable;
}
#region IDisposable Members
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
~DisposableDecorator()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
_innerDisposable.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
我可以很容易地测试innerDisposable
时被布置Dispose()
叫做:
[Test]
public void Dispose__DisposesInnerDisposable()
{
var mockInnerDisposable = new Mock<IDisposable>();
new DisposableDecorator(mockInnerDisposable.Object).Dispose();
mockInnerDisposable.Verify(x => x.Dispose());
}
Run Code Online (Sandbox Code Playgroud)
但我怎么写一个测试,以确保innerDisposable
它不会得到安置被终结?我想写这样的东西,但它失败了,大概是因为GC线程没有调用终结器:
[Test]
public void Finalizer__DoesNotDisposeInnerDisposable()
{ …
Run Code Online (Sandbox Code Playgroud) 我有一些EPS格式的图像,我想在我的WPF应用程序中使用.这可能吗?
如果没有,有没有办法将它们转换为XAML,所以我可以直接在WPF中使用它们?我没有Expression Design或Adobe Illustrator的预算,只有少数图像可以转换.
我有一些越来越复杂的XSLT样式表,如果我可以在CI构建过程中对它们进行一些测试,甚至使用TDD来开发它们将会很有帮助.我目前正在使用Visual Studio通过样式表运行XML片段,我手动检查结果.
大家会为此推荐什么?理想情况下,可以很容易地集成到CruiseControl.NET和/或MsBuild中.
我有一个TabControl
项目绑定到ObservableCollection
:
<TabControl ItemsSource="{Binding MyObservableCollection}" />
Run Code Online (Sandbox Code Playgroud)
随着项目的添加和从集合中删除,可以按预期添加和删除选项卡.但是,SelectedItem
只要集合为空,就会恢复为-1(表示没有选定的选项卡).然后,添加项目时,SelectedItem
保留在-1并且不选择新选项卡.
TabControl
每当项目添加到空集合时,如何选择新选项卡?
我在我的WPF应用程序中使用构造函数依赖注入,并且我继续运行以下模式,因此希望得到其他人的意见并听取替代解决方案.
目标是将ViewModel的层次结构连接到类似的模型层次结构,以便在每个模型中呈现信息的责任在于其自己的ViewModel实现.(这种模式在其他情况下也会出现,但MVVM应该是一个很好的例子.)
这是一个简化的例子.鉴于我有一个模型,其中包含更多模型的集合:
public interface IPerson
{
IEnumerable<IAddress> Addresses { get; }
}
public interface IAddress
{
}
Run Code Online (Sandbox Code Playgroud)
我想在ViewModel中镜像这个层次结构,以便我可以将ListBox(或其他)绑定到Person ViewModel中的集合:
public interface IPersonViewModel
{
ObservableCollection<IAddressViewModel> Addresses { get; }
void Initialize();
}
public interface IAddressViewModel
{
}
Run Code Online (Sandbox Code Playgroud)
子ViewModel需要显示来自子Model的信息,因此它是通过构造函数注入的:
public class AddressViewModel : IAddressViewModel
{
private readonly IAddress _address;
public AddressViewModel(IAddress address)
{
_address = address;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,将子Model提供给相应的子ViewModel的最佳方法是什么?
这个例子很简单,但在一个典型的实例中,ViewModels有更多的依赖 - 每个依赖都有自己的依赖(等等).我正在使用Unity 1.2(尽管我认为这个问题与其他IoC容器相关),我正在使用Caliburn的视图策略来自动查找并将相应的View连接到ViewModel.
这是我目前的解决方案:
父ViewModel需要为每个子Model创建一个子ViewModel,因此它在初始化过程中使用了一个工厂方法添加到它的构造函数中:
public class PersonViewModel : IPersonViewModel
{
private readonly Func<IAddress, IAddressViewModel> _addressViewModelFactory;
private readonly IPerson _person;
public …
Run Code Online (Sandbox Code Playgroud) 当对第三方程序集的依赖性添加到典型的.NET应用程序时,很容易忘记将它们添加到安装程序中.这个问题只有在安装应用程序之后才会显露出来,并且在启动时以崩溃的形式显示,并且几乎没有可用的有用信息.
找出需要添加到安装程序的程序集的最佳工具和技术是什么?
鉴于Silverlight 4中公布的新功能列表,WPF何时仍需要?
wpf ×5
silverlight ×4
xaml ×4
.net ×3
c# ×3
unit-testing ×2
collections ×1
crash ×1
data-binding ×1
dll ×1
eps ×1
finalizer ×1
idisposable ×1
installer ×1
mef ×1
mvvm ×1
stackpanel ×1
wpf-controls ×1
xslt ×1