如何将参数从xaml窗口传递给WPF usercontrol构造函数?我已经尝试创建依赖属性,但它无法做到.我应该尝试xaml扩展还是有其他方法可以做到这一点?
<local:Myusercontrol Param1="user1"/>
Run Code Online (Sandbox Code Playgroud)
调用的xaml.cs Window,以及它的用户控件.
public partial class SomeView : UserControl
{
SomeViewModel vm = new SomeViewModel();
public SomeView()
{
this.DataContext = vm;
InitializeComponent;
}
}
Run Code Online (Sandbox Code Playgroud)
InitializeComponent 在创建用户控件的实例之前,上面的窗口清除通过xaml设置的依赖项属性的值,因此depencency属性的值始终为null.
和usercontrol的xaml.cs
Myusercontrol : UserControl
{
public Myusercontrol (string User)
{
InitializeComponent();
UserControlViewModel vm = new UserControlViewModel (User);
this.DataContext = vm;
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是MVVM模式.
我有几个文件夹,一些文件夹的名称中包含非拉丁符号(在我的情况下是俄语).此文件夹在"D:\ test.zip"中发送到zip存档(由Windows资源管理器).然后我执行方法
ZipFile.ExtractToDirectory(@"D:\test.zip", @"D:\result");
Run Code Online (Sandbox Code Playgroud)
它成功地解压缩了所有内容,但所有非拉丁符号都变成了错误.
例如,我得到"D:\ result \ЄбЄ¤л\ file.txt"而不是"D:\ result\каскады\ file.txt".
我的系统的默认编码是windows-1251,我通过参与Encoding.GetEncoding("windows-1251")第三个参数ExtractToDirectory并得到相同的结果来验证.我也尝试过UTF-8,但在路径中有另外的文物("D:\ result\ ᪠ \file.txt").尝试使用Unicode返回有关不支持编码的消息.
当我通过执行方法通过代码创建相同的存档时
ZipFile.CreateFromDirectory(@"D:\zipdata", @"D:\test.zip");
Run Code Online (Sandbox Code Playgroud)
然后,即使没有指定特定的编码,也可以使用与问题顶部相同的代码行解压缩.
问题是:如何从归档中获取正确的编码以便在ExtractToDirectory方法中应用它,因为在实际任务归档中来自外部源并且我不能依赖于它"通过手"或编程创建的位置?
编辑
有问题,非拉丁符号(中文)也会导致问题,但这个事实就像解决问题一样,而这对我的情况来说确实是个问题.
我Image控制了PreviewMouseLeftButtonDown事件处理.逻辑是在单击发生时更改图像内容,并在双击时激活其他视觉样式.
我知道ClickCount属性就像一些答案所说的那样(例如这个)并且成功地区分单击/双击,但问题是单击总是发生,其中双击跟随或不跟随下一刻(这是公平的,无论如何).因此,双击处理两个操作 - 单击,下一次双击.
问题:有没有防止单一的点击方法之前是双击后存在的权利,比其他处理这种情况有某种神奇的计时器?
编辑:
我发现了一个好的评论问题,这与Windows资源管理器进行了类比 - 单击所选文件后如何等待,并开始重命名,确保第一次点击后没有其他点击.
延迟肯定会存在以解决这个问题的目的,但它是否意味着Windows资源管理器使用完全计时器,或者它可能有一些其他选项(某些属性或事件可以等待)以保持单击以防双击发生?
我有UserControl显示文件信息。我想使用视图模型模拟在 Visual Studio 设计器中查看测试文件信息。这是 XAML:
<Label Content="{Binding DateCreated}"/>
Run Code Online (Sandbox Code Playgroud)
视图模型:
internal class ViewModel
{
public ViewModel(string pathToFile)
{
var file = new FileInfo(pathToFile);
this.DateCreated= file.CreationTime.ToShortDateString();
}
public string DateCreated{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在设计时,我使用视图模型模拟类在设计器中看到真实的文件信息:
internal class ViewModelMock : ViewModel
{
public ViewModelMock() : base(@"D:\Images\mock.png")
{
}
}
Run Code Online (Sandbox Code Playgroud)
我通过d:DataContext和插入模拟到xaml d:DesignInstance:
<UserControl ...
xmlns:mocks="clr-namespace:Company.Product.Mocks"
d:DataContext="{d:DesignInstance mocks:ViewModelMock, DesignTimeCreatable=True}">
Run Code Online (Sandbox Code Playgroud)
它有效,但问题出在这个@"D:\Images\mock.png" 硬编码的 value 中。一旦解决方案由 TFS 提供支持,我需要将图像放入项目中,并从ViewModelMock, 相对于项目路径引用此图像。
我怎样才能做到这一点?
像获取当前工作目录这样的简单方法给出了“ C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE ”,我猜是因为这是负责 Visual …
在我的函数中,我接收实现IMediaPanel接口的对象:
public interface IMediaPanel
{
bool IsListsAreaVisible { get; }
bool IsNextEntityExists { set; }
}
private void InitConnections(IMediaPanel panelControl)
{
// Initialization logic
}
Run Code Online (Sandbox Code Playgroud)
在初始化期间,我需要指定属性的名称,我正在使用C#6.0 nameof关键字:
nameof(IMediaPanel.IsListsAreaVisible)
Run Code Online (Sandbox Code Playgroud)
这工作正常,但使用此表达式:
nameof(IMediaPanel.IsNextEntityExists)
Run Code Online (Sandbox Code Playgroud)
Visual Studio向我显示以下错误:
属性"MyNamespace.IMediaPanel.IsNextEntityExists"没有getter.
搜索"名称限制"并没有给我任何关于这个问题的答案,而且官方评论不包含对财产获取者的限制:
...以下值得一提的是产生错误:预定义类型(例如,int或void),可空类型(Point?),数组类型(Customer [,]),指针类型(Buffer*),限定别名(A :: B),以及未绑定的泛型类型(Dictionary <,>),预处理符号(DEBUG)和标签(循环:)....
任何人都可以解释为什么有这个限制,如果有任何参考?什么原因可以强制nameof关键字使用属性的实例getter,而它应该(我猜)只是通过Reflection使用一般类型信息?(至少在这种特殊情况下,当由于未知类型而无法直接指向实例的属性时,我只知道此实例实现了接口)
为了解释为什么@ Gusdor的评论建议不起作用,我需要澄清我如何调用InitConnections函数(简化形式):
public void Init(FrameworkElement panelControl)
{
// ... Other logic ...
this.InitConnections((IMediaPanel) panelControl);
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我nameof(panelControl.IsNextEntityExists)在内部使用Init函数,它将产生错误,因为FrameworkElement不包含自定义客户端的IsNextEntityExists属性.如果我在InitConnections函数中使用相同的表达式,我会得到关于getter的错误 - 与使用相同 …
c# ×5
wpf ×3
mvvm ×2
.net ×1
archive ×1
c#-6.0 ×1
click ×1
design-time ×1
double-click ×1
encoding ×1
getter ×1
localization ×1
nameof ×1
xaml ×1
zip ×1