是否有任何方法可以使WPF应用看起来像在Windows 7上运行,即使它在XP上运行?我正在寻找一些我可以粘贴的主题.我知道Codeplex上的主题项目(http://www.codeplex.com/wpfthemes),但它缺乏支持DataGrid,这是我批判性的需要.我想也许Windows 7主题可能只是一个简单的端口,或者已存在于某个文件中.您所拥有的任何信息(即使是坏消息)都将非常感激.
更新
使用@Lars Truijens的想法,我能够获得主要控件的Windows 7外观,但遗憾的是它不能用于DataGrid我需要的WPF Toolkit 控件.
DataGrid Aero主题看起来像这样

DataGrid 应该是这样的

所以,如果有人有任何想法,我仍然在寻找这个问题的解决方案.也许有人为Aero主题构建了一个扩展,涵盖了WPF工具包控件?同样,非常感谢您提供的任何信息.
更新2 - 问题解决了!
要使Aero主题与WPF Toolkit控件一起使用,您只需添加第二个Aero字典,因此您的App.xaml现在应该如下所示.
<Application.Resources>
...
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
<ResourceDictionary
Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
另外,我建议你在DataGrid控件中关闭网格线(因为它们看起来很糟糕):
<DataGrid GridLinesVisibility="None" ...>
Run Code Online (Sandbox Code Playgroud) 情况
我有两个.NET解决方案(Foo和Bar)以及一个包含ProjectA,ProjectB和ProjectC的公共库.Foo并Bar引用一个或多个库项目,但库项目不在Foo和Bar解决方案文件夹中.
目录结构:
-- My Documents*
-- Development
-- Libraries
-- ProjectA
-- ProjectB
-- ProjectC
-- Projects
-- Foo
-- Solution
-- .hg
-- .hgignore
-- Foo { Project Folder }
-- FooTests { Project Folder }
-- Foo.sln { References ProjectA }
-- Foo.suo
-- Bar
-- Solution
-- .hg
-- .hgignore
-- Bar { Project Folder }
-- BarTests { Project Folder }
-- Bar.sln …Run Code Online (Sandbox Code Playgroud) 我经常遇到一个案例,我希望所有类的集合都拥有类似的逻辑.例如,也许我想要a Bird和a Airplane都能够Fly().如果您正在考虑"战略模式",我会同意,但即使采用策略,有时也无法避免重复代码.
例如,让我们说以下适用(这与我最近遇到的真实情况非常相似):
Bird并Airplane需持实现一个对象的实例IFlyBehavior.Bird并Airplane需要问的IFlyBehavior实例Fly()时OnReadyToFly()被调用.Bird并Airplane需要问的IFlyBehavior实例Land()时OnReadyToLand()被调用.OnReadyToFly()并且OnReadyToLand()是私人的.Bird继承Animal和Airplane继承PeopleMover.现在,让我们说我们稍后添加Moth,HotAirBalloon和其他16个对象,让我们说它们都遵循相同的模式.
我们现在需要20份以下代码:
private IFlyBehavior _flyBehavior;
private void OnReadyToFly()
{
_flyBehavior.Fly();
}
private void OnReadyToLand()
{
_flyBehavior.Land();
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这两件事:
它不是很干(相同的九行代码一遍又一遍地重复).如果我们发现一个bug或添加一个BankRight()到IFlyBehavior,我们需要传播完成的更改应用到所有20个班.
没有任何方法可以强制所有20个类一致地实现这种重复的内部逻辑.我们不能使用接口,因为接口只允许公共成员.我们不能使用抽象基类,因为对象已经继承了基类,并且C#不允许多重继承(即使这些类还没有继承类,我们以后可能希望添加一个实现的新行为,比如说,ICrashable抽象基类并不总是一个可行的解决方案.
如果...? …
编辑
另请参阅如何正确清理Excel互操作对象?.我最近遇到了这个问题,它提供了很多关于如何正确处理COM对象的问题的见解.绝对检查超出第一个(标记的)答案,因为其他答案超出了简单的"不要使用两个点"和" ReleaseComObject用于每个com对象"的建议.
我首先重新审视了这个问题,因为我意识到尽管注册和处理所有COM对象非常彻底,但我的Excel实例仍然没有得到妥善处理.事实证明,有些方法可以创建完全不明显的COM对象(即,即使您从不使用两个点,也可以错过COM对象).此外,即使您是彻底的,如果您的项目增长超过一定的大小,错过COM对象的机会接近100%.当发生这种情况时,很难找到你错过的那个.上面链接的问题的答案提供了一些其他技术,以确保Excel实例肯定关闭.同时,我对我ComObjectManager(下面)做了一个小的(但重要的)更新,以反映我从上面链接的问题中学到的东西.
原始问题
我已经看到了几个Marshal.ReleaseComObject()与Excel Interop对象一起使用的例子(即来自命名空间Microsoft.Office.Interop.Excel的对象),但我已经看到它用于不同程度.
我想知道我是否可以逃避这样的事情:
var application = new ApplicationClass();
try
{
// do work with application, workbooks, worksheets, cells, etc.
}
finally
{
Marashal.ReleaseComObject(application)
}
Run Code Online (Sandbox Code Playgroud)
或者,如果我需要释放创建的每个对象,如此方法:
public void CreateExcelWorkbookWithSingleSheet()
{
var application = new ApplicationClass();
var workbook = application.Workbooks.Add(_missing);
var worksheets = workbook.Worksheets;
for (var worksheetIndex = 1; worksheetIndex < worksheets.Count; worksheetIndex++)
{
var worksheet = (WorksheetClass)worksheets[worksheetIndex];
worksheet.Delete();
Marshal.ReleaseComObject(worksheet);
}
workbook.SaveAs(
WorkbookPath, _missing, _missing, _missing, _missing, _missing,
XlSaveAsAccessMode.xlExclusive, _missing, …Run Code Online (Sandbox Code Playgroud) 我正在尝试实体框架代码优先.我似乎无法RecreateDatabaseIfModelChanges在WPF 4.0中找到要使用的程序集/命名空间.这是仅限ASP.NET的功能吗?如果没有,我应该参考哪个装配?
这是我的代码:
using System;
using System.Data.Entity;
using System.Windows;
using CodeFirstTester.Models;
namespace CodeFirstTester
{
public partial class App : Application
{
static App()
{
// this fails:
Database.SetInitializer(new RecreateDatabaseIfModelChanges<NerdDinners>());
// The type or namespace name 'RecreateDatabaseIfModelChanges'
// could not be found (are you missing a using directive or
// an assembly reference?)
using (var nerdDinners = new NerdDinners())
{
var dinner = new Dinner()
{
Title = "Party at Scott's House",
EventDate = DateTime.Parse("12/31/2010"),
Address = "Building 40", …Run Code Online (Sandbox Code Playgroud) 我有一个DataGrid包含多个列的WPF应用程序,包括一个Name列.如果用户切换到特定视图,我希望数据按名称进行预排序(我希望排序箭头显示在Name标题中,就像用户点击了该标题一样).但是,我无法找到实现这一目标的预期属性.我一直在寻找这样的事情SortColumn,SortColumnIndex,SortDirection,等.
是否可以在标记(XAML)中指定默认排序列和方向,或WPF工具包不支持DataGrid?
我的User主应用程序数据库中已经有一个表,其中包含一个电子邮件地址(用作用户名)和密码.我想使用我的数据库而不是默认的身份验证数据库(ASPNETDB)进行身份验证.
问题:
这是一个坏主意吗?使用我自己的数据库进行身份验证是否是一大堆蠕虫?
这样做我加了多少工作?我已经有用于散列密码的代码和一个检查电子邮件和密码是否与数据库匹配的查询.所以,我不会从头开始.
使用我的数据库而不是ASPNETDB需要做什么?我希望这可以通过几个简单的步骤来描述,但如果没有,你能指出我的好消息吗?
更新
在我的第三个问题上,我仍然在寻找更多细节.我需要自己写MembershipProvider吗?我需要对web.config文件进行哪些更改?[Authorize]如果我编写自己的解决方案,该属性是否仍然有用?我可以使用自动生成的AccountController进行一些小修改,还是我基本上需要从头开始重写帐户控制器?
当用户在我的列中进行排序时DataGrid,我希望将所有null或空单元格排序到底部,而不是顶部.
我写了一个IComparer<T>确保空白总是向下排序,但我无法弄清楚如何将它应用到我的列DataGrid.请注意,我使用LINQ 方法进行的初始排序DataGrid很OrderBy()有效.问题是用户执行的所有后续排序都将空白排序到顶部.
比较代码
public class BlankLastStringComparer : IComparer<string>
{
public int Compare(string x, string y)
{
if (string.IsNullOrEmpty(x) && !string.IsNullOrEmpty(y))
return 1;
else if (!string.IsNullOrEmpty(x) && string.IsNullOrEmpty(y))
return -1;
else
return string.Compare(x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
问题
如何DataGridColumn使用我的比较器?或者,如果这不可能,您能提供解决方法吗?如果可能的话,我希望有一个MVVM友好的解决方案.
我试图通过单元测试来弄湿我的脚.我目前不习惯为类编写接口,除非我预见到某些原因我需要交换不同的实现.好吧,现在我预见到一个原因:嘲笑.
鉴于我将从几个接口转到可能数百个接口,首先突然出现的是,我应该把所有这些接口放在哪里?我只是将它们与所有具体实现混合在一起,还是应该将它们放在子文件夹中.例如,控制器接口应该在根/控制器/接口,根/控制器或其他完全?你有什么建议?
c# unit-testing dependency-injection interface project-organization
描述
给定一个大小数组,(n*k+b)其中n个元素出现k次,一个元素出现b次,换句话说,有n+1不同的元素.鉴于0 < b < k找到b次元素.
我的尝试解决方案
显而易见的解决方案是使用散列,但如果数字非常大,则不起作用.复杂性是O(n)
使用map存储每个元素的频率,然后遍历map以找到b次出现的元素.由于Map的实现为高度平衡树,复杂性将是O(nlogn).
我的两个解决方案都被接受了,但是面试官想要一个线性解决方案,而不使用散列和暗示他给出的树的高度在你存储频率的树中保持不变,但我还没有找到正确的解决方案.
我想知道如何在没有散列的线性时间内解决这个问题?
编辑:
样品:
输入: n=2 b=2 k=3
Aarray: 2 2 2 3 3 3 1 1
输出: 1
c# ×4
wpf ×4
wpftoolkit ×3
.net ×2
sorting ×2
xaml ×2
algorithm ×1
arrays ×1
asp.net ×1
asp.net-mvc ×1
com ×1
datagrid ×1
excel ×1
interface ×1
mercurial ×1
mvvm ×1
oop ×1
sql-server ×1
subrepos ×1
themes ×1
tortoisehg ×1
unit-testing ×1
windows ×1