小编Sno*_*ear的帖子

wpf DocumentViewer - 通过GlyphRun获取ITextPointer,反之亦然

只是想知道是否有人试图入侵WPF DocumentViewer以使其更有用.我已经花了差不多一个星期的时间,已经尝试根据我使用反射提取的方法为这个控件创建更强大的API.

每个人都知道如何通过反射从文档查看器中获取所选文本,但我的任务更复杂.选定的文本具有EndStart特性,这回ITextPointers.我还有一个使用此代码提取的GlyphRuns集合.现在最后我想找出哪个包含选择开始. GlyphRun

所以我想知道如何转换ITextPointersGlyphRuns反之亦然.我知道他们没有1:1的关系.这个控制与封闭的API和上周在Reflector花了不让我睡不好觉.我希望也许有人尝试过这样做或者看过代码示例,并且能够指导我完成这些丛林.

c# wpf glyph documentviewer

35
推荐指数
1
解决办法
1570
查看次数

在WPF中强制绑定

我正在编写测试,它将检查BindingXAML中指定的元素的正确性.它们到目前为止工作,唯一的问题是我不知道如何正确地强制数据绑定发生.令人惊讶的是,仅仅设置内容是不够的,在DataContext显示控件/窗口之前不会发生绑定.请注意,我正在编写'单元'测试,我想避免显示任何窗口.

看看下面的代码:

// This is main class in console application where I have all WPF references added
public class Program
{
    [STAThread]
    public static void Main()
    {
        var view = new Window();
        BindingOperations.SetBinding(view, Window.TitleProperty, new Binding("Length"));
        view.DataContext = new int[5];
        //view.Show(); view.Close(); // <-- this is the code I'm trying not to write
        Console.WriteLine(view.Title);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正在创建一个Window并DataContext为该窗口放置一个数组.我绑定Window.TitleArray.Length所以我希望5在控制台中看到数字.但是直到我Show窗口(注释行)我才会得到空字符串.如果我取消注释该行,那么我将5在控制台输出中收到所需的内容.

有没有办法在不显示窗口的情况下进行绑定?在启动测试时查看~20个窗口非常烦人.

PS:我知道我可以让窗户更透明等等,但我正在寻找更优雅的解决方案.

UPDATE上面的代码是我真正拥有的简化版本.在实际代码中,我收到View一些(有些UIElement …

data-binding wpf unit-testing

19
推荐指数
1
解决办法
3323
查看次数

当popup中的datagrid捕获鼠标时,wpf弹出窗口不会自动关闭

我有一个弹出窗口,StaysOpen=False所以我想通过点击弹出窗口外的任何地方来关闭它.在弹出窗口我有一个DataGrid.如果我打开弹出窗口然后单击其他位置,弹出窗口将被关闭.但是如果在点击弹出窗口之前我将点击列标题,就不会发生这种情况DataGrid.测试XAML:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black">
<Grid>
    <ToggleButton x:Name="btn" VerticalAlignment="Top">Open</ToggleButton>
    <Popup StaysOpen="False" IsOpen="{Binding IsChecked, ElementName=btn}" > 
        <DataGrid Width="150" Height="150">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Column" />
            </DataGrid.Columns>
        </DataGrid>
    </Popup>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

我认为这是因为列标题在点击时捕获鼠标并且弹出窗口不再接收鼠标事件.我试图在LostMouseCapture事件上添加一个处理程序,以便通过弹出窗口捕获鼠标,但它似乎并不那么容易.有任何想法吗?

c# wpf grid popup mousecapture

14
推荐指数
2
解决办法
2551
查看次数

LINQ - 嵌套where子句

我的项目有问题.我想获得一份公司名单,但只过滤那些位于"斯德哥尔摩"的公司.

表结构

**Company**:
CompanyID
CompanyName
etc…

**CompanyAddressDetails** (relation table):
Company_CompanyID
CorrespondingAddress_AddressID

**CorrespondingAddress**:
AddressID
StreetName
City
etc…
Run Code Online (Sandbox Code Playgroud)

现在我首先做的是一个查询:

var companyModel = from c in db.Company select c;
Run Code Online (Sandbox Code Playgroud)

它获取完整的公司列表并具有相应的地址(可以是多个),因此结果如下所示:

在此输入图像描述

所以我的问题是:我如何根据CorrespondingAddress下的一个嵌套元素进行过滤?比如城市?

到目前为止我试过了

companyModel = companyModel.Where(s => s.CorrespondingAddress.Where(x => x.City.Equals("Stockholm")));
companyModel = companyModel.Where(s => s.CorrespondingAddress.ToList().First().Address.Equals("Stockholm"));
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用.谢谢!

c# linq entity-framework

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

.NET应用程序无法在Windows 7中打开

我在windows xp上使用visual studio 2010创建了一个非常简单的c#应用程序.它可以在我的机器上编译,运行和调试.我甚至构建了它以便发布并在我的机器上运行.exe和另一台Windows XP机器完全没问题.当我发送带有.exe文件的release文件夹并打开它时,没有任何反应!没有错误或任何东西,只是空白!

安装了.NET版本4框架

它是一个Windows窗体应用程序.

更新:OP给出以下答案之一的评论的详细信息:

嘿大家,谢谢你的想法.我复制了我在朋友的Windows 7机器事件日志中发现的内容,这就是它所说的:

应用程序:ePrescribing.exe Framework版本:v4.0.30319
描述:
由于未处理的
异常,进程已终止.异常信息:
System.IO.FileNotFoundException Stack:
位于
ePrescribing.frmApp.Main()
的ePrescribing.frmApp.EitialComponent()
ePrescribing.frmApp.Main()

   Faulting application name: ePrescribing.exe, version: 1.0.0.0,  
Run Code Online (Sandbox Code Playgroud)

时间戳:0x4d61e693错误模块
名称:KERNELBASE.dll,版本:
6.1.7600.16385,时间戳:0x4a5bdbdf异常代码:0xe0434352错误
偏移量:0x0000b727错误进程
id:0xb38错误应用程序启动
时间:0x01cbe1dbe6d4ba2d错误
应用程序路径:
C:\ Users\Duane\Downloads\ePrescribing.exe
错误模块路径:
C:\ Windows\syswow64\KERNELBASE.dll
报告ID:
266adc61-4dcf-11e0-8438-e0cb4e197cde -

   Fault bucket , type 0 Event Name: CLR20r3 Response: Not available  
Run Code Online (Sandbox Code Playgroud)

驾驶室ID:0问题签名:P1:
eprescribing.exe P2:1.0.0.0 P3:
4d61e693 P4:ePrescribing P5:1.0.0.0
P6:4d61e693 P7:28 P8:e P9:
System.IO.FileNotFoundException P10: -

我删除了唯一
一个我认为会有文件加载的区域
(对于picturebox加载profile.jpg)并且仍然得到相同的错误.有任何想法吗?

c# windows-7

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

LINQ区分大小写

如何根据情况使LINQ区分大小写并且不区分大小写?

我正在使用sql server 2008和Entity Framework 4.0.

我更改了COLLATION以使SQL Server区分大小写.所以对于这样的场景:

 query = query.Where(x => x.Username == username);
Run Code Online (Sandbox Code Playgroud)

它很棒.但是,当按主题(或名称或类似)搜索时,我需要能够从db 忽略大小写中提取数据,如下所示:

query = query.Where(x => (x.Name.Contains(Name)));
Run Code Online (Sandbox Code Playgroud)

当记录是"TestString"并且我正在寻找"测试"或"测试"或类似时,它不起作用.我如何才能使它在文本中找到文本或字符串的一部分?谢谢

sql linq linq-to-entities

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

更改成员连接字符串

我是asp.net会员新手,我需要帮助以编程方式更改其连接字符串.

我到现在为止尝试的是

我已经创建了一个类项目名称Sample作为名称空间**并扩展了 System.Web.Security.SqlMembershipProvider

代码为

namespace Sample
{
    public class Connectionstring : SqlMembershipProvider
    {
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
        {
            string connectionString = "server=xx.xx.xx;database=db;user id=un;password=pwd";    

           // Set private property of Membership provider.  
           FieldInfo connectionStringField = GetType().BaseType
                     .GetField("_sqlConnectionString", BindingFlags.Instance |
                                                       BindingFlags.NonPublic);
           connectionStringField.SetValue(this, connectionString);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并将成员标记中的Web配置文件更改为

<membership defaultProvider="SQLMembershipProvider">
  <providers>
    <add name="SQLMembershipProvider" type="sample.Connectionstring,sample" connectionStringName="SQLMembershipConnString" applicationName="@@@@@@@" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" />
  </providers>
</membership>
Run Code Online (Sandbox Code Playgroud)

并且在运行Web应用程序项目时,我正在更改的连接字符串不会被更改?

等待您的宝贵回复和评论

.net c# connection-string sqlmembershipprovider

7
推荐指数
1
解决办法
4767
查看次数

没有变基的git svn dcommit

我们公司使用(并支持!)SVN,但我倾向于使用git.我想要尝试的是拥有git存储库 - 每个项目一个,项目开发人员将能够从这个存储库中提取(当然,如果他们愿意,可以相互拉取).但我仍然希望将所有更改推送到SVN,因为SVN由我们的技术支持维护.

我正在使用以下存储库测试方案:

  1. SVN-repository - 这个由我们公司维护,我们的团队应该在某个时候推动所有变更
  2. git-svn-clone - 这是从上面的SVN克隆的git存储库 - 所有项目开发人员都应该在这里推送他们的提交
  3. git-dev-clone - 这是开发人员的git存储库.

我注意到直接使用'git svn rebase'和'git svn dcommit'的唯一问题是,在每次从开发人员的git存储库推送到git-svn-clone存储库之后,我必须在更改后立即重新设置开发人员的存储库将被传播到SVN并重新定位.我想要实现的是在每次推动后避免变基.

请注意,我假设每个项目开发人员只使用git存储库,没有人会直接使用SVN.

通过在推送并使用SVN客户端将这些更改提交到SVN之后,在'git-svn-clone'存储库中逐个检出每个git提交,我能够手动实现此行为.我相信'git svn dcommit'会做同样的事情,但它也会从SVN同步并更改提交SHA标识符,这会强制我进行rebase.

PS:--no-rebase选项git svn dcommit没有帮助,因为在第一次提交传播到SVN git svn dcommit之后不允许我对SVN 进行更多更改,直到前一个更新为止.我曾尝试过这种行为,可能会忽略一些事情.

svn git git-svn rebase

6
推荐指数
1
解决办法
2463
查看次数

在xml-comment的cref部分构造泛型类型

我有这样的通用异常类:

public class DuplicateException<TEntity> : Exception
{
    public TEntity Entity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有非泛型方法可能会抛出构造的泛型异常:

void Save()
{
    throw new DuplicateException<SomeEntity>();
}
Run Code Online (Sandbox Code Playgroud)

这个方法可能抛出这个通用异常,但只抛出这个构造类型DuplicateException<SomeEntity>,它不能抛出这个异常而不是其他类型参数SomeEntity.

现在我想在xml-comment中为Save方法指定这个事实.本文稍微介绍了如何使用泛型异常来评论方法,我尝试了以下两种方法:

1)通过VS中的自动完成默认插入:

/// <exception cref="DuplicateException{TEntity}" />
Run Code Online (Sandbox Code Playgroud)

2)替换TEntitySomeEntity

/// <exception cref="DuplicateException{SomeEntity}" />
Run Code Online (Sandbox Code Playgroud)

但是在这两种情况下,输出XML仍然声明这个方法可能抛出一般的非构造类型,完全没有提到SomeEntity:

<exception cref="T:MyNameSpace.DuplicateException`1" />
Run Code Online (Sandbox Code Playgroud)

c# generics xml-comments

6
推荐指数
1
解决办法
876
查看次数

更改statusStrip的高度

我在VS2010中有一个带有statusStrip的简单windows窗体,无论我尝试什么,statusStrip的高度都不会改变,改变高度的正确方法是什么?

谢谢

c# statusstrip winforms

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