我有一个用c ++编写的dll,我需要在我的c#代码中使用这个dll.搜索后我发现使用P/Invoke可以访问我需要的函数,但这些函数是在类中定义的,并使用非静态私有成员变量.所以我需要能够创建这个类的实例来正确使用这些函数.如何才能访问此类以便创建实例?我一直无法找到办法.
我想我应该注意c ++ dll不是我的代码.
我有一个包含多个用户控件的程序集.对于此用户控件程序集,我想要一个资源字典.程序集中的所有用户控件都应该能够访问资源字典.我必须添加吗?
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
应该使用资源字典的每个用户控件,还是有某种方法将它放在一个地方并只是引用它?
我可以在我的主应用程序中引用它,还是需要MergedDictionaries调用呢?
编辑:主应用程序位于单独的项目/程序集中,而不是用户控件.
我正在使用WPF开发一个应用程序.该应用程序全屏运行,无论显示器分辨率如何,我都需要它才能很好地调整大小.图形设计师为UI按钮,背景等设计了精美的图像.使用Illustrator插件,所有图像都已转换为xaml文件.我已将所有这些图像添加到应用程序中,它们看起来很棒.我也使用了很多Grid布局,以便屏幕可以在保持布局的同时调整大小.所有这些都根据需要显示,当以不同的分辨率运行时,没有任何东西看起来拉伸.但是,屏幕转换和UI交互很慢.
我想知道,这是由于图形的大量使用?我使用了太多的Grid布局吗?但是,我需要Grids以便我可以拥有分辨率独立性.
该应用程序在我的开发机器上运行良好,但在具有较低性能的机器上运行速度非常慢.是的,这是可以预料的,但不是我所看到的程度.我的雇主坚持认为应用程序在这些性能较低的机器上运行顺畅.
我已经对应用程序进行了一些分析,看起来需要花费最多时间的是显示内容(尽管我不确定我是否完全理解如何有效地使用分析器).
如果WPF导致速度减慢,我该怎么做才能改善这一点?
我正在开发一个需要独立于分辨率的应用程序.应用程序将始终全屏,因此我必须设计我的UI,以便监视器分辨率不会影响应用程序的使用.我花了很多时间玩WPF试图完成这个.今天我发现了Viewbox.它似乎解决了我所有的问题.我所要做的就是放置用于在Viewboxes中布局每个屏幕的网格,就像魔法我有一个独立于分辨率的应用程序.
但是,这似乎很容易.感觉不对劲.我应该使用Viewboxes吗?如果不是我应该做什么呢?在我发现Viewbox之前,我很难想出一种在分辨率方面扩展字体大小的方法.使用Viewbox,我不必担心这一点.因此,如果使用Viewbox是错误的,我该如何调整文本大小?
我有几乎同样的问题:
但是,我正在尝试更改显示的字符串; 不添加,删除或排序.我已经尝试了引用问题中提供的BindingList解决方案,但它没有帮助.在编辑项目时,我可以看到组合框的DataSource属性已正确更新,但组合框中显示的内容不是DataSource属性中的内容.
我的代码如下:
mSearchComboData = new List<SearchData>();
mSearchComboData.Add(new SearchData("", StringTable.PatientID));
mSearchComboData.Add(new SearchData("", StringTable.LastName));
mSearchComboData.Add(new SearchData("", StringTable.LastPhysician));
mSearchComboData.Add(new SearchData("", StringTable.LastExamDate));
mBindingList = new BindingList<SearchData>(mSearchComboData);
SearchComboBox.Items.Clear();
SearchComboBox.DataSource = mBindingList;
SearchComboBox.ValueMember = "Value";
SearchComboBox.DisplayMember = "Display";
...
Run Code Online (Sandbox Code Playgroud)
当我尝试更新内容时,我会执行以下操作:
int idx = SearchComboBox.SelectedIndex;
mBindingList[idx].Display = value;
SearchComboBox.Refresh();
Run Code Online (Sandbox Code Playgroud)
编辑::
RefreshItems似乎是一个私有方法.我只是收到错误消息:
"'System.Windows.Forms.ListControl.RefreshItems()'由于其保护级别而无法访问"
ResetBindings无效.
弹出窗口的默认行为是,如果它放置在超出屏幕边缘的位置,Popup将重新定位自身.有没有办法解决这个问题?
我有一个用户可以在屏幕上拖动的Popup.但是,当它到达边缘时会卡住.它会卡在边缘并停留在那里,直到鼠标被拖离边缘.此外,我有两个显示器,当弹出窗口被拖到边缘时,两个显示器共享我闪烁.弹出窗口在两个监视器之间闪烁.
我需要获取当前用户的显示名称,并找不到始终有效的解决方案.为了清楚起见,我不是在寻找用户名.我需要"John Doe"."开始"菜单上显示的值.
关于这个问题有很多帖子,但没有一个解决了我的问题.
这两个帖子引导我:
PrincipalContext context = domain.Equals(Environment.MachineName, StringComparison.CurrentCultureIgnoreCase) ?
new PrincipalContext(ContextType.Machine) :
new PrincipalContext(ContextType.Domain, domain);
UserPrincipal userPrincipal = new UserPrincipal(context) { SamAccountName = username };
PrincipalSearcher searcher = new PrincipalSearcher(userPrincipal);
userPrincipal = searcher.FindOne() as UserPrincipal;
string displayName = userPrincipal.DisplayName;
Run Code Online (Sandbox Code Playgroud)
这段代码大部分都适用.但是,如果用户已在其计算机上禁用/停止了服务器服务,则会出现"服务器服务未启动"的异常.
System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName
Run Code Online (Sandbox Code Playgroud)
同样的错误.
StringBuilder name = new StringBuilder(1024);
uint userNameSize = (uint)name.Capacity;
const int NameDisplay = 3;
GetUserNameEx(NameDisplay, name, ref userNameSize)
Run Code Online (Sandbox Code Playgroud)
不返回错误,但如果用户不在域中,则返回空字符串.
如何可靠地在所有版本的Windows上读取用户的显示(第一个和最后一个)名称?
// get SAM compatible name <server/machine>\\<username>
if (0 != GetUserNameEx(2, username, ref userNameSize))
{ …Run Code Online (Sandbox Code Playgroud) 我需要动态更改应用于我的一个按钮的背景图像,但无法弄清楚如何.图像将添加到项目中,并将其"构建操作"设置为"资源".我试过以下:
buttonUnits.Background = new ImageBrush(new BitmapImage(new Uri("/Images/InchDOWN.png",UriKind.Relative)));
Run Code Online (Sandbox Code Playgroud)
这成功编译,但会在DirectoryNotFoundException崩溃时说"无法找到路径的一部分'C:\ Images\InchDOWN.png'."
我不希望应用程序在磁盘上查找图像.如何将图像用作嵌入式资源?我认为它涉及将构建操作更改为嵌入式资源,但如何在后面的代码中使用此资源?
如何强制在我的主线程上执行一段代码?
这就是为什么我想知道:
我有一个自定义创建的消息框,有时从一个不是主线程的线程显示.但是,当调用消息框构造函数时,我得到一个InvalidOperationException,说"调用线程必须是STA,因为许多UI组件都需要这个." 这是有道理的,需要在主线程上处理UI元素.
我的MessageBox.ShowMessage(...)函数是一个静态函数,它创建我的自定义消息框的实例并显示它.是否有一些东西可以放在ShowMessage中,它会强制创建消息框并显示在主线程上?在我的代码的其他地方,我使用Control.BeginInvoke来处理类似的问题,但由于它是一个静态函数,因此我没有现有的UI元素来调用BeginInvoke.
我是否必须使用Control.BeginInvoke调用MessageBox.ShowMessage?我更喜欢从ShowMessage中调用BeginInvoke(或一些等价物).