小编Jor*_*Day的帖子

在Web API中生成超媒体链接

我很想知道别人如何处理为他们的网络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中装饰各种操作的属性?

c# hateoas hypermedia asp.net-web-api

20
推荐指数
2
解决办法
1万
查看次数

为什么WPF列表框会在鼠标按钮上更改选择而不是按钮?

我之前从未注意到这一点,但是当鼠标停止时,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以这种方式工作?有没有人对此有任何见解?

.net c# wpf xaml listbox

11
推荐指数
2
解决办法
6402
查看次数

在按钮的控件模板中,如何设置包含文本的颜色?

使用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 …

silverlight wpf button visualstatemanager controltemplate

10
推荐指数
2
解决办法
1万
查看次数

Visual Studio 2010 - 无法单步执行.NET Framework 4源代码(PresentationCore.dll)

问题:我在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方法: 在此输入图像描述

"无源可用"窗口,禁用"浏览到查找源": 在此输入图像描述

我不确定还能尝试什么?

.net c# wpf visual-studio-2010 visual-studio

8
推荐指数
1
解决办法
2859
查看次数

从非托管c ++动态加载混合模式C++/CLI .dll(和依赖项)

我有一个托管C++程序集,我通过标准的LoadLibrary()调用在非托管c ++应用程序中动态加载.托管C++程序集依赖于几个托管(C#)程序集.一切正常,直到我将所有托管程序集移动到unmananged应用程序的子目录.为了显示:

  • 托管C++ .dll(MyCoolDll.dll)

    • 取决于DotNetDll1.dll
    • 取决于DotNetDll2.dll
  • 非托管C++应用程序(MyCoolApp.exe)

    • 通过LoadLibrary加载MyCoolDll.dll("MyCoolDll.dll")

这很好,直到我将MyCoolDll.dll,DotNetDll1.dll和DotNetDll2.dll移动到/ someSubDirectory(MyCoolApp.exe中的代码更新为LoadLibrary("someSubDirectory/MyCooldll.dll")

我猜测当加载MyCoolDll.dll时,它试图在工作目录中找到DotNetDll1.dll和DotNetDll2.dll,而不是它所在的目录.

如何告诉MyCoolDll.dll其依赖项存在于子目录中?它是一个在非托管应用程序内运行的库,所以我不认为我可以在app.config或其他任何东西中指定它?

.net c++ managed-c++ c++-cli loadlibrary

5
推荐指数
2
解决办法
4689
查看次数

WPF Datagrid - 行的编程选择似乎破坏了多选(特别是按住 Shift 键单击多选)

我有一个 WPF DataGrid 控件,其 SelectionUnit 为“FullRow”,SelectionMode 为“Extended”,我正在以编程方式选择其中的项目(通常是第一个项目)。该选择有效,但由于某种原因,任何形式的程序选择似乎都会破坏移位选择多选功能。

如果我单击 DataGrid 中的另一个项目(因此我刚刚单击的项目是唯一选定的项目),则 Shift-Select 将起作用。只有当我以编程方式选择该项目时,它似乎才会中断。此外,在任何一种情况下,按住 Control 键单击都可以选择多个项目——似乎只有 Shift 键选择被破坏了。

我尝试过以编程方式选择单个项目的各种形式,从简单的 myGrid.SelectedIndex = 0 到使用 DataGrid 的 ItemContainerGenerator 获取 DataGridRow 对象的实例并在其上设置 IsSelected = true,但都无济于事。

重申一下——以编程方式选择项目是可行的,但它会破坏按住 Shift 键并单击的选择。

以前有人遇到过这个吗?我尝试将焦点设置在以编程方式选择的 DataGridRow 实例上,但它似乎没有帮助?

wpf datagrid multi-select

5
推荐指数
1
解决办法
3100
查看次数

LEFT JOIN 跨越三个表(带连接表)

在 Postgres 中,有没有办法left join在由联结表链接的表之间执行 a ,并对链接表进行一些过滤?

比如说,我有两个表humanspets,我想在我有人类 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)

sql database postgresql many-to-many left-join

5
推荐指数
1
解决办法
1786
查看次数

什么时候内联任务?

从像源在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()调用不会导致它启动.

.net c# multithreading task task-parallel-library

4
推荐指数
1
解决办法
1035
查看次数

RouteTable.Routes和HttpConfiguration.Routes之间的区别?

我想知道为什么路由似乎可以从HttpConfiguration对象和RouteTable类配置?显然,两个.Routes属性的类型不同,但它们似乎保持同步.他们有可能失去同步吗?我想知道,不过,从Web API的角度看,应该RouteTable.Routes 曾经被使用?

asp.net asp.net-routing asp.net-web-api

4
推荐指数
1
解决办法
722
查看次数

WPF绑定到另一个属性的样式绑定

我不确定提出这个问题的最佳方式(对于含糊不清的问题标题感到抱歉),但实际上我想使用从数据上下文传递属性的值转换器在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 .

任何指导都会非常感激!

data-binding wpf xaml styles valueconverter

2
推荐指数
1
解决办法
2万
查看次数