tl; dr:强制值不会跨数据绑定传播.当代码隐藏不知道绑定的另一面时,如何强制更新数据绑定?
我正在使用一个CoerceValueCallbackWPF依赖属性,我坚持认为强制值不会传播到绑定的问题.
Window1.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
namespace CoerceValueTest
{
public class SomeControl : UserControl
{
public SomeControl()
{
StackPanel sp = new StackPanel();
Button bUp = new Button();
bUp.Content = "+";
bUp.Click += delegate(object sender, RoutedEventArgs e) {
Value += 2;
};
Button bDown = new Button();
bDown.Content = "-";
bDown.Click += delegate(object sender, RoutedEventArgs e) {
Value -= 2;
};
TextBlock tbValue = new TextBlock();
tbValue.SetBinding(TextBlock.TextProperty,
new Binding("Value") { …Run Code Online (Sandbox Code Playgroud) 到目前为止,我假设System.Windows.Application.Run在WPF应用程序中的调用将启动其主消息循环,从而为UI提供其"生命".至少,这就是在WinForms和Gtk#中发生的事情,并且在这个问题中,似乎也为WPF提出了相同的建议,即博客文章,最终是文档本身(间接地,通过Dispatcher.Run).
在对WPF的文件Application.Run强调它是多么的重要调用Run:
调用Run以启动WPF应用程序.(...)如果使用代码定义应用程序,则需要显式调用Run.
然后,它提供了一个示例,试图在演示调用的必要性时引人注目Run.确实 - 评论出来了
app.Run();
Run Code Online (Sandbox Code Playgroud)
从该示例中得到一个应用程序,它只是暂时显示一个控制台窗口,然后立即退出.
但是,方便的是,该示例中的窗口是在对象的OnStartup方法中创建和显示的,该方法Application在调用后被调用Run.将窗口相关代码移动到Main方法中后,窗口至少会显示一下:
[STAThread]
public static void Main()
{
CustomApplication app = new CustomApplication();
//app.Run();
Window window = new Window();
window.Show();
}
Run Code Online (Sandbox Code Playgroud)
显然,这是因为window非模态,在窗口显示并且应用程序立即到达终点后继续执行.所以,如果我们以window模态显示,事情看起来更好:
[STAThread]
public static void Main()
{
//CustomApplication app = new CustomApplication();
//app.Run();
Window window = new …Run Code Online (Sandbox Code Playgroud) 编辑:为避免混淆:这是关于以前称为或仍称为Microsoft Surface 1.0的表.它不是以前称为Microsoft Surface 2.0的表,也不是现在称为Microsoft Surface的平板电脑.编辑结束
我正在编写一个WPF应用程序,它既可以在桌面系统上运行,也可以在MS Surface/PixelSense 1.0上运行.我正在寻找关于如何做到这一点的惯例.
我知道平台之间存在一些差异,这就是为什么桌面和PixelSense版本的基本GUI骨架不同(在这种情况下,Canvas桌面版本和ScatterViewPixelSense版本中的根GUI元素).
但是,桌面版本中有许多基于WPF的用户控件/ GUI片段,它们在PixelSense版本中的显示方式大致相同.
不幸的是,标准WPF控件在PixelSense中似乎不起作用.CheckBox必须更换的控件SurfaceCheckBox才能对用户输入作出反应,这可以通过PixelSense上的这个小代码示例轻松验证:
var item = new ScatterViewItem();
var sp = new StackPanel();
item.Content = sp;
item.Padding = new Thickness(20);
sp.Children.Add(new CheckBox() { Content = "CheckBox" });
sp.Children.Add(new SurfaceCheckBox() { Content = "SurfaceCheckBox" });
myScatterView.Items.Add(item);
Run Code Online (Sandbox Code Playgroud)
显然,这意味着WPF用户控件无法在没有任何更改的情况下显示在PixelSense上,这可以通过资源中的声明(如PixelSense表示层上的Microsoft文档)进行确认,其中诸如此类与WPF树视图相关的问题也可参考对,我这篇文章的PixelSense WPF层或该如何改写为PixelSense一个WPF桌面应用程序SO问题.后一页甚至将所需的更改调为最小,但仍然是更改.
此外,对如何在PixelSense上使用特定WPF桌面控件的SO问题的反应意味着使用.NET 4.0可能会简化事情,但我不认为PixelSense 1.0 SDK …
我使用的是Microsoft Visual C#2010 Express.当我使用箭头更改numericUpDown的值时,我的按钮变为启用.但是当我通过直接更改文本来更改numericUpDown的值时,我也想启用我的按钮.
我使用以下代码:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
button1.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud) 出于某种原因,当访问不存在的路由时,我的 ASP.NET Web 应用程序返回错误 500(显然源自处理程序“ExtensionlessUrlHandler-Integrated-4.0”)。
这个问题已经开始后,我改变了发生path="*."于path="*"在<add name="ExtensionlessUrlHandler-Integrated-4.0" ...我行Web.config的文件,以解决另一个问题(未能工艺路线与最后一个斜线后点)。
我无法改path回"*.",即使在另一个问题中确实建议将其作为解决方案,因为这将带回另一个问题- 在最后一个斜杠之后的部分中找不到带有点的路由。
就像在链接的其他问题中一样,我正在使用 OData。但是,在我的情况下,我根本不知道它应该在路由解析中发挥任何作用,因为我认为我们将它视为在我们的 C# 项目中引用并由我们的一些 Web API 端点调用的普通库。
<modules runAllManagedModulesForAllRequests="true"/>已经在我的Web.config文件中设置了。
我还能做什么来为未知路由返回 404,并且接受“扩展名”路由(即最后一个斜杠后的最后一部分包含点的路由)?
编辑:我已经设法增加了我的 FREB 日志大小,现在看到有问题的条目是编号 1346,说
ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="500", HttpReason="内部服务器错误", HttpSubStatus="0", ErrorCode="Rekursion zu tief, Stapelüberlauf. (0x800703e9)", ConfigExceptionInfo=""
在英文中,错误消息的意思是:“递归太深,堆栈溢出。”
因此,它似乎与另一个问题中的问题相同,但是,那里的答案对我的情况没有帮助:
两个答案都参考了<handlers> …
将Gtk#RadioButton类的实例添加到GUI时,会自动检查("激活")其单选按钮组的第一个成员.
对于Gtk,这在一定程度上已经在另一个问题中进行了讨论,所选答案的要点是用户希望始终选择一个单选按钮.
我不反对.
但是,我会以某种方式自动生成用户界面,因此每个单选按钮都链接到数据模型,但是没有一个单选按钮可以随时获取对任何其他RadioButton实例的引用.数据模型确保始终检查一个单选按钮.
除了足以满足用户期望之外,我认为这是一个好的做法,就像这样,数据完整性由数据模型确保,而不是由GUI确保.
不幸的是,Gtk#会自动检查这样的所有单选按钮,因为它认为每个单选按钮是其组中的第一个.为了将各种单选按钮添加到同一组,我必须将组中的第一个单选按钮传递给其他单选按钮的构造函数 - 我不能,如上所述,因为我没有任何方法可以获得实例化其他时对第一个单选按钮的引用.
设置单选按钮的Active属性false没有帮助,也没有调用该Toggle方法.
有没有办法抑制这种自动选择,可能是通过子类化和覆盖我还找不到的东西?或者,CheckButton为了这个目的,是否有可能强制a 看起来像一个单选按钮?
如果真的没有其他解决方案,我会尝试实现另一个答案中建议的解决方案,其中包括为我的每个单选按钮添加第二个隐藏的单选按钮,但我会发现对于生产代码非常hacky.
我正在开发一组相互依赖的库,并且我想生成这些库的多个版本,针对不同的 .NET 框架版本。果然,这是一个常见问题,并且有大量文档介绍.csproj如何以(更常提到的)configuration或(恕我直言更适合)platform变量包含目标框架的选择的方式编写文件。
所有库都采用通用解决方案。
现在,某些库具有仅在较新的 .NET 框架版本上可用的外部依赖项。因此,对于旧版本,构建相应的项目是没有意义的。
如何根据所选项目排除某些项目platform?
我想这个问题的答案一定是以下方法之一,但我找不到有关如何执行此操作的任何具体信息:
.sln文件中的一个设置,允许我有条件地从解决方案中排除某些项目。从MSDN 文档中,我不清楚文件中的任何项目是否.sln可以标记为仅在给定的一组设置处于活动状态时才构建。.csproj文件中的一个设置,允许我有条件地禁用编译(不会使编译失败,而是指示当前不应构建项目)。我的第一个猜测是OutputType设置,但它只允许Library, Exe, Module, 和Winexe; 没有诸如 之类的值None。当然,有一种解决方法是为.sln每个 .NET Framework 版本创建一个单独的文件,但这听起来很麻烦(因此很容易出错),因为将来任何附加库都必须添加到每个文件中.sln,因此是大量重复的解决方案代码和大量重复的工作。
.sln我更喜欢学习如何在和/或文件的源代码中执行此操作.csproj。
当我在 Azure DevOps 上的拉取请求 (PR) 代码审查期间发现问题时,我可以留下评论(实际上是一个新的评论线程)。
所有评论的解决可以配置为完成 PR 的先决条件。因此,将评论(线程)设置为“已解决”并不是一个无关紧要的操作。
如何找出谁将给定评论线程设置为“已解决”?
一些背景信息:一旦 PR 收集了大约 50 条或更多评论线程,审阅者在每一轮审阅中总是重新筛选所有评论就会变得很麻烦。Azure DevOps 提供的唯一有意义的方式是区分活动评论和关闭评论,以区分哪些评论已得到满意解决。但有时,开发人员自己将评论设置为“已解决”,而不是将其留给评论者,此时确定已关闭评论的解决方案是否实际上已由审阅者检查会变得非常混乱。
我正在寻找一种定义WPF资源(目前用作静态资源)的方法,该资源可从我的应用程序中的任何位置访问。
我的资源在此资源字典中定义:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="flatButtonStyle" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="{x:Type Button}">
<Setter Property="BorderThickness" Value="4"/>
</Style>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
选择此问题的答案表明,我必须将该资源字典合并到我的App.xaml文件中(名为的项目AppWideResources):
<Application x:Class="AppWideResources.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/AppWideResources;component/CommonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
起初,这似乎有效;该窗口中的按钮以适当的扁平样式设计,带有超厚边框:
<Window x:Class="AppWideResources.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AppWideResources" Height="300" Width="300"
>
<StackPanel>
<Button Style="{StaticResource flatButtonStyle}" Content="Test" HorizontalAlignment="Stretch"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
但是,一旦在控件模板中使用共享资源,此操作就会停止:
我(出于此问题的目的,对此进行了极其简化)控制:
using System;
using System.Windows;
using System.Windows.Controls;
namespace AppWideResources
{
public class MyControl : Control
{
static MyControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算给定属性的值的数量,并输出每个检索到的资源以及该数字。我试图BIND将函数的结果值存储COUNT在变量中,并将该变量投影到我的结果中。但是,该值似乎是空的,我不明白为什么会这样。
我的查询目前如下所示:
SELECT DISTINCT ?a ?c
WHERE {
?a <http://www.w3.org/2000/01/rdf-schema#label> ?b.
BIND(COUNT(?b) AS ?c).
}
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
我想我必须 group by ?a,虽然我还不确定当我想对多个属性执行此操作时如何继续,但这不是这个问题的关注点:现在,我只是想找出为什么?c似乎是空的。
现在,每个结果行不应该只有一个标签吗?如果是这样,为什么文字不1^^xsd:integer绑定到?c- 或者至少是一些代表标签总数(未分组)的高数字(类似于此处发生的情况) - 例如在以下端点上:
我知道我正在寻找的功能可能不受部分或全部这些实现的支持 - 但如果是这样,似乎不寻常的是,它COUNT只是“吞没”而没有错误消息(我确实在其他一些端点上收到了错误消息)对于语法)。
因此,我的问题是:为什么返回值为COUNT空?
COUNT未被端点识别?
COUNT函数是否仅在稍后进行评估(如果是这样,为什么它至少不返回类似的内容0)?wpf ×4
c# ×3
.net ×1
app.xaml ×1
asp.net ×1
azure-devops ×1
coerce ×1
csproj ×1
data-binding ×1
gtk# ×1
iis-10 ×1
msbuild ×1
pixelsense ×1
pull-request ×1
radio-button ×1
resources ×1
routes ×1
routing ×1
solution ×1
sparql ×1
winforms ×1
xaml ×1