我一直在寻找这个问题,发现放置一个含蓄TextBlock的风格Application.Resources是风格适用于所有的TextBlocks,即使是那些内如其他控件Buttons,ComboBoxes等等
<Application.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Blue" />
</Style>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
配售隐含的风格Window.Resources 不交叉控制模板的界限,所以像Buttons和ComboBoxes维持其默认的黑色文本.
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Blue" />
</Style>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
此外,在其中添加默认样式Application.Resources使其无法用另一种隐式样式覆盖该样式.
<!-- Doesn't work if implicit style with same property is in Application.Resources -->
<ComboBox.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ComboBox.Resources>
Run Code Online (Sandbox Code Playgroud)
我的问题是:
Application.Resources和之间是否还有其他差异Windows.Resources?何时应该使用一个而不是另一个?
我理解这Application.Resources适用于整个应用程序,Window.Resources只适用于窗口,但我想知道为什么样式Application处理方式不同于样式Window
假设你有一个正整数数组,操纵它们,以便结果数组的整数串联是可能的最大数.例如:{9,1,95,17,5},结果:9955171
家庭作业警察:这是一个谷歌电话采访问题,并没有签署任何NDAs;).
做某些事情是否有效
CREATE SYNONYM [dbo].[MyTable] FOR [AnotherDatabase].dbo.[MyTable]
然后修改Entity Framework的edmx文件以读取此对象,就像任何其他表一样?
我做了一个快速的样本测试,它似乎在选择和更新时工作正常,但我想知道是否有任何理由我不应该这样做
我通过创建指向第二个数据库的edmx文件,在那里构建实体,然后将定义复制/粘贴到第一个数据库的edmx文件中来获取表定义.
UPDATE
如果有人有兴趣,我写下了我在这里制作edmx文件跨越多个数据库所做的工作.它包括用于生成同义词和合并edmx文件的脚本.
我有一个使用AutoGenerateColumns = True绑定到DataTable的WPF 4.0 DataGrid.列是动态的,但我知道总会有一个名为ID的列,我想隐藏这一列.有没有办法可以做到这一点?
我有一个继承自的类,ObservableCollection并添加了一些其他方法,如AddRange和RemoveRange
我的基本方法调用是这样的:
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我想要访问e.NewItems或者e.OldItems在CollectionChanged事件中对集合中的任何项目执行操作,并且NotifyCollectionChangedAction.Reset操作不会传递这些值
void Instances_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null) // e.NewItems is always null
{
foreach (var item in e.NewItems)
{
if (item is EventInstanceModel)
((EventInstanceModel)item).ParentEvent = this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我认为我可以使用NotifyCollectionChangedAction.Add而不是Reset,但是会引发Range actions are not supported异常
public void AddRange(IEnumerable<T> collection)
{
var addedItems …Run Code Online (Sandbox Code Playgroud) 有没有办法从ItemsControl的ItemTemplate中绑定到ItemIndex?
例如:
<ItemsControl ItemsSource="{Binding Path=ItemList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ThisItemsIndex}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud) 我有一个WCF客户端,它将自我跟踪实体传递给使用MVVM构建的WPF应用程序.应用程序本身具有动态接口.用户可以根据他们在哪个角色或他们正在执行的任务来选择他们想要在他们的工作区域中可见的对象.
我的自我跟踪实体有很多导航属性,其中很多都不需要.由于其中一些对象可能非常大,我只想根据请求加载这些属性.
我的应用程序如下所示:
[WCF] <---> [ClientSide Repository] <---> [ViewModel] <---> [View]
我的模型是自我跟踪实体.在将Model返回到请求它的ViewModel之前,Client-Side Repository挂钩了一个LazyLoad方法(如果需要).所有WCF服务调用都是异步的,这意味着LazyLoad方法也是异步的.
LazyLoad的实际实现给我带来了一些麻烦.以下是我提出的选项.
编辑 - 我删除了代码示例,试图让这更容易阅读和理解.如果您想查看它,请参阅以前版本的问题
选项A.
异步Lazy从Getter中的WCF服务器中获取Model的属性
好:按需加载数据非常简单.XAML中的绑定会加载数据,因此如果控件在屏幕上,则数据会异步加载并在UI处于通知状态时通知UI.如果没有,没有任何负载.例如,<ItemsControl ItemsSource="{Binding CurrentConsumer.ConsumerDocuments}" />将加载数据,但是如果接口的Documents部分不存在,则不会加载任何内容.
错误:在启动之前,不能在任何其他代码中使用此属性,因为它将返回一个空列表.例如,如果尚未加载文档,则以下调用将始终返回false.
public bool HasDocuments
{
get { return ConsumerDocuments.Count > 0; }
}
Run Code Online (Sandbox Code Playgroud)
选项B.
在需要时手动调用加载数据
好:易于实现 - 只需添加LoadConsumerDocumentsSync()和LoadConsumerDocumentsAsync()方法
错误:必须记住在尝试访问数据之前加载数据,包括在Bindings中使用它时.这可能看起来很简单,但它很快就会失控.例如,每个ConsumerDocument都有一个UserCreated和UserLastModified.有一个DataTemplate定义UserModel,其中ToolTip显示其他用户数据,如扩展名,电子邮件,团队,角色等.因此,在我的ViewModel中显示我必须调用的文档LoadDocuments,然后循环遍历它们并调用LoadConsumerModified和LoadConsumerCreated.它可以继续下去......之后我必须LoadUserGroups和LoadUserSupervisor.它还存在循环循环的风险,其中类似于User具有Groups[]属性的东西,并且Group具有Users[]属性
选项C.
到目前为止我最喜欢的选项...创建两种访问该属性的方法.一个同步和一个异步.绑定将对Async属性进行,任何代码都将使用Sync属性.
好:数据是根据需要异步加载的 - 正是我想要的.没有那么多额外的编码,因为我需要做的就是修改T4模板以生成这些额外的属性/方法.
不好:有两种方法来访问相同的数据似乎效率低下且令人困惑.您需要记住何时应该使用Consumer.ConsumerDocumentsAsync而不是 …
我开发了一个嵌入在ASP.NET网页中的XAML浏览器应用程序(XBAP).我在客户端计算机上更新最新版本的XBAP时遇到问题.在开发过程中,我不得不使用Mage.exe工具清除应用程序缓存,以便在我的本地计算机上运行时可以看到我的更改.除了Mage.exe -cc在命令行中执行外,我还发现rundll32 dfshim CleanOnlineAppCache它也能正常工作.
但是,我不想让客户在命令行中运行任何命令.我需要做些什么才能使XBAP在客户端计算机上自动更新?先前版本的XBAP将继续运行,而不是在客户端计算机上刷新更新的XBAP.
更新
我在这个问题上创造了一笔赏金,因为我有同样的问题.根据我在线阅读的内容,XBAP应该将缓存版本#与网络服务器上的版本#进行比较,如果不同则下载新版本.我已经验证我的版本号不同,但缓存的副本仍然是我启动XBAP时运行的副本.
如果我在asp.net页面之外启动XBAP,也会出现缓存副本,但如果我更改了url参数,我会得到新版本.
更新#2
我发现XBAP会在XP 32位计算机上自动更新,但不能在我的Windows 7 64位计算机上自动更新.
我有一个旧的Web应用程序,其中Javascript用于验证某些日期.用户通常使用2位数年份,我最近发现它将00评为1900而不是2000
if (new Date(tb[0].value) > new Date(tb[1].value)){
alert('Starting date must come before the ending date');
tb[0].focus();
return false;
}
Run Code Online (Sandbox Code Playgroud)
在第一个框中输入1/1/99,在第二个框中输入1/1/00将导致错误消息,指出开始日期必须在结束日期之前,因为99在1999年评估,而00在1900评估.
当然,用户可以使用4位数年来解决这个问题,但我仍然想知道如何让Javascript正确评估2位数年份.
所以我的问题是,如何让Javascript将00评估为2000而不是1900?
尝试使用XMLSerialization序列化对象时,我收到以下异常.
A circular reference was detected while serializing an object of type MyObject}
我知道循环引用是因为ObjectA可以有一个childObjectObjectB而ObjectB parentObject是ObjectA,但是如果可能的话我想保留该引用.有没有办法让这个对象在XML序列化中序列化而不会在序列化过程中丢失任何数据?我对序列化并不熟悉,所以我希望我能设置一些属性.
wpf ×5
c# ×4
algorithm ×1
arrays ×1
asp.net ×1
async-await ×1
data-binding ×1
datagrid ×1
date ×1
itemscontrol ×1
javascript ×1
lazy-loading ×1
resources ×1
sql-server ×1
synonym ×1
wcf ×1
xaml ×1
xbap ×1