我正在寻找一种方法来本地化PropertyGrid中显示的属性名称.可以使用DisplayNameAttribute属性"覆盖"属性的名称.不幸的是,属性不能有非常量表达式.所以我不能使用强类型资源,例如:
class Foo
{
[DisplayAttribute(Resources.MyPropertyNameLocalized)] // do not compile
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我浏览了一下,发现了一些从DisplayNameAttribute继承的建议,以便能够使用资源.我最终会得到如下代码:
class Foo
{
[MyLocalizedDisplayAttribute("MyPropertyNameLocalized")] // not strongly typed
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
但是我失去了强大的类型资源优势,这绝对不是一件好事.然后我遇到了DisplayNameResourceAttribute,这可能是我正在寻找的.但它应该在Microsoft.VisualStudio.Modeling.Design命名空间中,我找不到我应该为此命名空间添加的引用.
有人知道是否有更好的方法以一种好的方式实现DisplayName本地化?或者是否有使用Microsoft似乎用于Visual Studio的方法?
好吧,这很简单:
Application.ThreadException和之间有什么区别AppDomain.CurrentDomain.UnhandledException?
我需要处理两者吗?
谢谢!
我有以下示例代码,每次按下按钮时缩放:
XAML:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="myCanvas">
<Canvas.LayoutTransform>
<ScaleTransform x:Name="myScaleTransform" />
</Canvas.LayoutTransform>
<Button Content="Button"
Name="myButton"
Canvas.Left="50"
Canvas.Top="50"
Click="myButton_Click" />
</Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)
*的.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("scale {0}, location: {1}",
myScaleTransform.ScaleX,
myCanvas.PointToScreen(GetMyByttonLocation()));
myScaleTransform.ScaleX =
myScaleTransform.ScaleY =
myScaleTransform.ScaleX + 1;
Console.WriteLine("scale {0}, location: {1}",
myScaleTransform.ScaleX,
myCanvas.PointToScreen(GetMyByttonLocation()));
}
private Point GetMyByttonLocation()
{
return new Point(
Canvas.GetLeft(myButton),
Canvas.GetTop(myButton));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
scale 1, location: …Run Code Online (Sandbox Code Playgroud) 我有一个Mercurial存储库,我只在本地使用...这是我的个人用法(所以我不会"推"到任何地方).
我提交了3个文件,但之后我明白我应该提交4个文件...
有没有办法"回滚"我的最后一次(最新的,只有一次)提交,并"重新发送"它与正确的文件?
(我不知道为什么,但我的" 修改当前修订版 "选项不活动,所以我不能用它...)
是否可以在WPF控件资源中设置整数值?!
<UserControl.Resources>
<SolidColorBrush x:Key="MyLineBrush" Color="LightGreen" />
??? <Integer x:Key="MyStrokeThickness" Value="2" /> ???
<Style TargetType="local:MyLine" x:Key="MyLineStyleKey">
<Setter Property="Stroke"
Value="{DynamicResource MyLineBrush}"/>
<Setter Property="StrokeThickness"
Value="{DynamicResource MyStrokeThickness}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
为了动态修改MyLineBrush和MyStrokeThickness值......
我的Visual Studio 2005是法语版,安装在法语操作系统上.我在调试或运行时收到的所有异常也都是用法语获得的.
但是,我可以做一些异常消息是英文的吗?对于护目镜,讨论等
我尝试了以下方法:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
throw new NullReferenceException();
Run Code Online (Sandbox Code Playgroud)
获得
你调用的对象是空的.
这当然很酷......但是,当我在法国项目上工作时,我不会硬编码强制Thread.CurrentUICulture为英文.我希望英语更改仅在我的本地计算机上,并且不要更改项目属性.
是否可以在不修改应用程序代码的情况下设置异常语言?
在VS 2008中,将工具 - >选项 - >环境 - >国际设置 - >语言设置为"英语"wnd抛出相同的异常获取ex message en French,但是: alt text http://lh4.ggpht.com/ _1TPOP7DzY1E/S1V62xcvHAI/AAAAAAAAC7o/ckLDVFPKh5Y/S800/exception.png
在VS 2010中创建了一个新WinForm项目.添加了一个新的UserControl WPF.
出现2个编译时错误:
错误1类型'System.Windows.Markup.IQueryAmbient'在未引用的程序集中定义.您必须添加对程序集'System.Xaml,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.D:\ Projets\WindowsFormsApplication2\UserControl1.xaml.cs 20 26 WindowsFormsApplication2
错误2在名称空间"System.Windows.Markup"中找不到类型名称"IComponentConnector".此类型已转发到程序集'System.Xaml,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'考虑添加对该程序集的引用.D:\ Projets\WindowsFormsApplication2\obj\x86\Debug\UserControl1.g.cs 41 100 WindowsFormsApplication2
NB.
喜欢参考PresenationCore.dll,PresenationFramework.dll,WindowsBase.dll添加新的用户控件WPF的WinForm的项目时自动添加,所以为什么不System.Xaml.dll呢?
==============
在Microsoft Connect上报告了错误.
当我在整个解决方案中在文件中查找(Ctrl + Shift + F)时,Visual Studio(2010,旗舰版)找不到任何内容.但是,它在搜索" 当前文档"或" 当前项目"时发现2次.
我看到输出窗口中的"搜索的总文件数"是一个随机数,与我解决方案中的文件数不对应(要小得多).
我已经做了devenv /resetsettings但这没有帮助.
在"所有解决方案"中连续2次搜索的输出示例:
找到所有"缩放 - ",子文件夹,保持修改后的文件打开,查找结果1,"整个解决方案","*.vb"
匹配行:0匹配文件:0搜索到的文件总数:24
查找已停止进行中.找到所有"缩放 - ",子文件夹,保持修改后的文件打开,查找结果1,"整个解决方案","*.vb"匹配行:0匹配文件:0搜索到的总文件数:32
查找已停止正在进行中.
我不知道为什么它说"查找已停止",因为我等待搜索结束(不要按任何按钮).
在方法中将自定义对象设置为null(Nothing在VB.NET中)是否有意义Dispose()?这可以防止内存泄漏或无用吗?!
让我们考虑两个例子:
public class Foo : IDisposable
{
private Bar bar; // standard custom .NET object
public Foo(Bar bar) {
this.bar = bar;
}
public void Dispose() {
bar = null; // any sense?
}
}
public class Foo : RichTextBox
{
// this could be also: GDI+, TCP socket, SQl Connection, other "heavy" object
private Bitmap backImage;
public Foo(Bitmap backImage) {
this.backImage = backImage;
}
protected override void Dispose(bool disposing) {
if (disposing) …Run Code Online (Sandbox Code Playgroud) 恕我直言,MSDN没有提供Control.PointToScreen(链接)和Control.PointToClient(链接)方法之间的明显区别.
是否有人可以用一些简单的词语解释这些方法之间的区别.特别是我不清楚"客户"的概念.
我理解PointToScreen给定点的实际屏幕坐标(屏幕左上角的[0,0]).
例如,调试我的一些代码
?click.Location
{X = 3 Y = 9}
?shapeSender.PointToClient(click.Location)
{X = -470 Y = -565}
?shapeSender.PointToScreen(click.Location)
{X = 476 Y = 583}
Run Code Online (Sandbox Code Playgroud)
谢谢.
.net ×7
c# ×4
winforms ×3
wpf ×3
localization ×2
attributes ×1
commit ×1
dispose ×1
mercurial ×1
rollback ×1
vb.net ×1
wpf-controls ×1
xaml ×1