我很想知道别人如何处理为他们的网络API生成超媒体链接的问题?具体来说,我正在使用ASP.NET Web API,并且在操作返回与超媒体相关的类型,或者返回资源本身,以及在管道中稍后发生超媒体内容之间徘徊.也就是说,人们倾向于做以下事情:
public Resource<Order> GetOrder(int id) {
return new Resource<Order>() {
Content = new Order(),
Links = new LinkCollection<Order>() { new AddOrderLink(), new UpdateOrderLink()}
}
Run Code Online (Sandbox Code Playgroud)
或者更喜欢的东西
public Order GetOrder(int id) { return new Order(); }
Run Code Online (Sandbox Code Playgroud)
然后在HttpOperationHandler或自定义格式化程序或其他内容中添加超媒体链接?
如果方法更像#2,你怎么知道要生成什么链接?只是为所有Order对象生成一些标准的链接集?在OrdersController中装饰各种操作的属性?
我之前从未注意到这一点,但是当鼠标停止时,WPF ListBox似乎更改了其SelectedItem,但尚未发布.作为一个简单的例子,只需创建一个包含多个ListBoxItem的简单ListBox,如下所示:
<ListBox>
<ListBoxItem>Hello</ListBoxItem>
<ListBoxItem>World</ListBoxItem>
<ListBoxItem>ListBox</ListBoxItem>
<ListBoxItem>Test</ListBoxItem>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
启动你的应用程序,按下鼠标按钮(不要释放它!)并移动鼠标.SelectedItem将随着鼠标移动而改变.这说明了一个更大的问题(至少对我来说),一旦你按下鼠标就会设置ListBox的SelectedItem ,而不是在鼠标启动时设置.通常这不是问题,但在我的情况下,我想在我的ListBox中的项目上进行拖放操作,而不会明确选择项目.
我想我唯一的办法就是构建一个自定义的ItemsControl或Selector,其选择风格类似于ListBox,所以我的问题更多,为什么ListBox以这种方式工作?有没有人对此有任何见解?
使用Silverlight 4和WPF 4,我正在尝试创建一个按钮样式,当按钮被鼠标悬停时,它会改变任何包含文本的文本颜色.因为我试图使它与Silverlight和WPF兼容,所以我使用了可视状态管理器:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="outerBorder" CornerRadius="4" BorderThickness="1" BorderBrush="#FF757679">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="#FFFEFEFE"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="contentPresenter"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Border x:Name="Background" CornerRadius="3" BorderThickness="1" BorderBrush="Transparent">
<Grid>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
</Border>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
由于这是一个常规旧按钮的模板,我知道不能保证里面甚至有一个文本块,起初我不确定这是否可能.奇怪的是,如果按钮声明如下,文本颜色确实会改变:
<Button Content="Hello, World!" />
Run Code Online (Sandbox Code Playgroud)
但如果按钮声明如下,它不会改变:
<Button>
<TextBlock Text="Hello, World!" /> <!-- Same result with <TextBlock>Hello, World </TextBlock> -->
</Button>
Run Code Online (Sandbox Code Playgroud)
即使可视树(在snoop中检查时)是相同的(Button - > ContentPresenter …
问题:我在System.Windows.Interop.HwndKeyboardInputProvider的FilterMessage方法中得到了一个nullref,我真的想尝试调试,但是没有能够逐步完成源我不知道还能做什么.
我已经尝试过 设置Visual Studio 2010以允许我逐步浏览.NET Framework源代码(特别是在PresentationCore.dll中的System.Windows.Interop.HwndKeyboardInputProvider的FilterMessage方法).我无法让我的visual studio显示.NET源代码进行调试.我遵循了各种不同的文章/博客,但似乎没有任何工作.我尝试过的:
在VS2010选项 - >调试菜单中,启用"启用.NET Framework源步进",启用"启用源服务器支持",禁用"要求源文件与原始版本完全匹配",按照此处的说明进行操作:(http:// blogs.microsoft.co.il/blogs/arik/archive/2010/07/12/step-into-net-framework-4-0-source-code.aspx)并安装参考源并设置VS以使用参考源包含的符号文件,以及基于在线文章/博客条目的其他几个尝试.使用该方法,我可以在我的模块窗口中看到正在加载PresentationCore.dll的符号,但是当我尝试进入我正在尝试调试的区域时,我仍然得到"无源可用"窗口.
模块窗口显示从我安装.NET 4参考源的路径加载符号:

调用堆栈显示我似乎应该能够进入PresentationCore.dll的System.Windows.Interop.HwndKeyboardInputProvider.FilterMessage方法:

"无源可用"窗口,禁用"浏览到查找源":

我不确定还能尝试什么?
我有一个托管C++程序集,我通过标准的LoadLibrary()调用在非托管c ++应用程序中动态加载.托管C++程序集依赖于几个托管(C#)程序集.一切正常,直到我将所有托管程序集移动到unmananged应用程序的子目录.为了显示:
托管C++ .dll(MyCoolDll.dll)
非托管C++应用程序(MyCoolApp.exe)
这很好,直到我将MyCoolDll.dll,DotNetDll1.dll和DotNetDll2.dll移动到/ someSubDirectory(MyCoolApp.exe中的代码更新为LoadLibrary("someSubDirectory/MyCooldll.dll")
我猜测当加载MyCoolDll.dll时,它试图在工作目录中找到DotNetDll1.dll和DotNetDll2.dll,而不是它所在的目录.
如何告诉MyCoolDll.dll其依赖项存在于子目录中?它是一个在非托管应用程序内运行的库,所以我不认为我可以在app.config或其他任何东西中指定它?
我有一个 WPF DataGrid 控件,其 SelectionUnit 为“FullRow”,SelectionMode 为“Extended”,我正在以编程方式选择其中的项目(通常是第一个项目)。该选择有效,但由于某种原因,任何形式的程序选择似乎都会破坏移位选择多选功能。
如果我单击 DataGrid 中的另一个项目(因此我刚刚单击的项目是唯一选定的项目),则 Shift-Select 将起作用。只有当我以编程方式选择该项目时,它似乎才会中断。此外,在任何一种情况下,按住 Control 键单击都可以选择多个项目——似乎只有 Shift 键选择被破坏了。
我尝试过以编程方式选择单个项目的各种形式,从简单的 myGrid.SelectedIndex = 0 到使用 DataGrid 的 ItemContainerGenerator 获取 DataGridRow 对象的实例并在其上设置 IsSelected = true,但都无济于事。
重申一下——以编程方式选择项目是可行的,但它会破坏按住 Shift 键并单击的选择。
以前有人遇到过这个吗?我尝试将焦点设置在以编程方式选择的 DataGridRow 实例上,但它似乎没有帮助?
在 Postgres 中,有没有办法left join在由联结表链接的表之间执行 a ,并对链接表进行一些过滤?
比如说,我有两个表humans和pets,我想在我有人类 ID 和宠物名称的地方执行查询。如果人类 ID 存在,但他们没有使用该名称的宠物,我仍然希望返回人类的行。
如果我从petsto有 FK 关系humans,这将起作用:
select h.*, p.*
from humans as h
left join pets as p on p.human_id = h.id and p.name = 'fluffy'
where h.id = 13
Run Code Online (Sandbox Code Playgroud)
我会得到一行 13 岁的人的详细信息和蓬松的价值观。此外,如果人类 13 没有名为“fluffy”的宠物,我会得到一行包含人类 13 的值,以及宠物列的空值。
但是,我没有直接的 FK 关系,我在humans和之间有一个连接表pets,所以我正在尝试这样的查询:
select h.*, p.*
from humans as h
left join humans_pets_junction as j on j.human_id = h.id
left …Run Code Online (Sandbox Code Playgroud) 从像源在TPL内联读了之后在这里,我得到的印象是,以Task.Wait(通话)将启动尚未开始(至少使用默认的调度器)的任务.但是,写一个快速演示,如:
var taskB = new Task(
() =>
{
Console.WriteLine("In TaskB");
System.Threading.Thread.Sleep(5000);
Console.WriteLine("Leaving TaskB");
});
var taskA = new Task(
() =>
{
Console.WriteLine("In TaskA");
System.Threading.Thread.Sleep(500);
Console.WriteLine("Waiting on TaskB");
taskB.Wait();
Console.WriteLine("Leaving TaskA");
});
taskA.Start();
taskA.Wait();
Run Code Online (Sandbox Code Playgroud)
造成死锁.TaskA进入taskB.Wait()行,但taskB永远不会启动.我没有搞乱调度程序或任何东西,所以我不确定为什么对taskB的.Wait()调用不会导致它启动.
我想知道为什么路由似乎可以从HttpConfiguration对象和RouteTable类配置?显然,两个.Routes属性的类型不同,但它们似乎保持同步.他们有可能失去同步吗?我想知道,不过,从Web API的角度看,应该RouteTable.Routes 曾经被使用?
我不确定提出这个问题的最佳方式(对于含糊不清的问题标题感到抱歉),但实际上我想使用从数据上下文传递属性的值转换器在TextBox上设置MaxLength属性,和传入属性的属性作为转换器参数.我希望以一种风格来做所有这些,而不是逐个控制.以下是以非样式方式执行此操作的示例:
<TextBox Text="{Binding MyPropertyName.TheirPropertyName}" MaxLength="{Binding MyPropertyName, Converter={StatocRespirceMyCoolConverter}, ConverterParameter=TheirPropertyName}" />
Run Code Online (Sandbox Code Playgroud)
(如果您想知道,ItsPropertyName表示MyPropertyName类型的属性,它具有[StringMaxLength(15)]等属性,我可以在值转换器中找到并返回.)此外,是否有传递MyPropertyName类型而不是实例的任何方式?我只需要类型来执行StringMaxLength属性查找.
无论如何,我怎么能在风格上做这样的事情呢?我已经达到了:
<Setter Property="MaxLength">
<Setter.Value>
<Binding Converter="{StaticResource textFieldMaxLengthConverter}" />
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
但是这会将整个datacontext传递给值转换器,而不是MyPropertyName对象,我真的不知道如果我可以解析MyPropertyName.TheirPropertyName部分绑定以在绑定的ConverterParameter属性上传递ItsPropertyName .
任何指导都会非常感激!
wpf ×5
.net ×4
c# ×4
xaml ×2
asp.net ×1
button ×1
c++ ×1
c++-cli ×1
data-binding ×1
database ×1
datagrid ×1
hateoas ×1
hypermedia ×1
left-join ×1
listbox ×1
loadlibrary ×1
managed-c++ ×1
many-to-many ×1
multi-select ×1
postgresql ×1
silverlight ×1
sql ×1
styles ×1
task ×1