小编Nic*_*sen的帖子

使用intent-filter无法正常使用URL打开Android应用

我有一个Android应用程序,人们用它来替代网站.因此,当用户遇到网站的URL时,我想让他们在我的应用程序中而不是在浏览器中"打开URL".换句话说,我希望弹出窗口可以让我们在我的应用程序和浏览器(以及可能的其他应用程序)之间进行选择.

我从各种渠道了解到,我需要在我的应用中为活动添加一个意图过滤器,其中"数据"过滤器会过滤正确形式的网址.

有问题的网站是http://members.iracing.com,因此我添加了以下intent过滤器:

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:host="members.iracing.com" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

我尝试了各种形式的这些数据过滤器,例如使用具有这两个属性的单个"数据"节点:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" android:host="members.iracing.com"/>
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

它根本不起作用.我不知道还能告诉你什么.我在我的网站上托管了一个简单的HTML页面,其中有几个链接指向该网站上的各个页面(所有页面都以"http://members.iracing.com/..."开头),当我点击其中任何页面时,它们只是打开在浏览器中没有问我想要使用哪个应用程序.我在模拟器上以及在我的物理设备上安装应用程序后都尝试了它,没有任何作用.我在一个完全BLANK,新的Android项目中尝试了这个,只是为了看看它是否有用,什么都没有.

然后我意识到该网站需要身份验证,如果您没有登录,则会重定向到https://members.iracing.com/membersite/login.jsp上的登录页面,因此我尝试用"https"替换该方案.我甚至尝试将主机改为"www.members.iracing.com",最后我甚至尝试了所有这些东西的组合(不确定这是否应该有效,但是嘿,我现在绝望了...... ...)

       <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:host="members.iracing.com" />
            <data android:host="www.members.iracing.com" />
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

仍然没有去.我不确定重定向是否相关,浏览器显然首先进入非重定向网站,然后重定向到登录页面,但在任何时候我都无法选择在我的应用程序中打开它.此外,如果我首先在浏览器中手动登录,则没有重定向,但仍然无效.

我错过了一些明显的东西吗?我把我的头发拉出来为什么这不起作用,除了尝试我能想到的每一种可能的组合之外我都无法调试它(我做了......).谢谢你的帮助!

android http intentfilter

33
推荐指数
3
解决办法
4万
查看次数

Web.config Build vs Release转换不起作用

我有一个ASP.NET Web应用程序项目,通过实体框架连接到远程数据库.在调试期间(例如,在我的本地计算机上运行项目),数据库的IP地址与发布期间的IP地址不同(例如,在将项目上载到我的Web服务器并从浏览器运行之后).到目前为止,我总是手动更改Web.config文件中的数据库连接字符串以在两者之间切换(基本上我必须连接字符串,一个名为'Debug',一个'Release',我只是在部署时交换名称).

现在我只是注意到应该可以通过Web.config Transformation Syntax自动发生这种情况,你可以将修改后的连接字符串放在Web.Release.config版本中,然后在Release版本下构建DLL时应该使用它.

但它似乎对我不起作用......

这是我的常规Web.config文件的相关部分(其中包含用于本地使用的Debug连接字符串):

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <!-- Debug connection string. Release connection string is in Web.Release.config file -->
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>
Run Code Online (Sandbox Code Playgroud)

这是Web.Release.config文件,如果DLL处于Release模式下,根据示例应将"DatabaseEntities"连接字符串"A"替换为"B":

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
  <connectionStrings>
    <add name="DatabaseEntities"
      connectionString="B"
      xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>

</configuration>
Run Code Online (Sandbox Code Playgroud)

(显然"A"和"B"只是我真实连接字符串的占位符)

当我调试应用程序时(例如只按F5),使用默认的Web.config,我可以访问数据库.然后,我通过Configuration Manager将构建配置更改为Release.解决方案中的所有项目都设置为发布配置.然后我构建解决方案(仅通过Build或甚至通过完整的重建(例如Clean,Rebuild)).我将新构建的DLL上传到Web服务器,以及Web.config和Web.Release.config文件,当我尝试访问我无法访问的数据库时,它仍然试图通过调试IP地址访问数据库因此无法找到它......

似乎Web.Release.config文件被完全忽略,或者至少没有替换连接字符串.

我究竟做错了什么?转换语法错了吗?我没有正确地在发布模式下构建应用程序吗?

asp.net release web-config build web-config-transform

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

使用jQuery检索表中的上一行和下一行

我正在使用ASP.NET创建一个具有GridView的页面,该页面对最终用户非常易于编辑.基本上,所有行都包含TextBoxes(而不是静态文本),用户可以随时编辑它们.除非他单击页面底部的"保存"按钮,否则不会发生回发.然后,我遍历网格中的每一行,检索每行控件中的值并将它们保存回数据库.

我现在正在尝试在Javascript中实现交换两行(向上或向下移动一行),为此我需要一些方法来检索表中的上一行和下一行.

目前,我的GridView包含一个HiddenField作为第一列,其中包含数据项的唯一ID(我需要将其存储回数据库当然).出于其他目的(删除一行),我已经找到了如何检索此ID,这是:

var itemHf = $(this).parent().parent().parent().find(':input');
Run Code Online (Sandbox Code Playgroud)

有这么多"父"调用,因为这发生在Image的click事件中,该事件位于LinkBut​​ton中,它位于网格的最后一列内.所以第一个父亲是LinkBut​​ton,下一个是表格单元格,最后是表格行.然后,我想该 find(':input')函数返回此行中的第一个输入元素(在我的例子中是包含id的隐藏字段).

所以,使用相同的方法,我可以得到当前行:

var row = $(this).parent().parent().parent();
Run Code Online (Sandbox Code Playgroud)

但是如何获得上一行和下一行呢?

此外,一旦我有这些行,我将需要从更多的输入元素中检索值.我知道我可以找到第一个使用的find(':input'),但是如何在这个表行中找到第二个和第三个输入元素?

编辑
我目前没有任何HTML,但这里是网格的ASP.NET标记:

        <asp:GridView runat="server" ID="grid" AutoGenerateColumns="False" 
            onrowcommand="grid_RowCommand" onrowdeleting="grid_RowDeleting">
            <Columns>

                <!-- Move Up button -->
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton runat="server" OnClientClick="return false;">
                            <asp:Image ImageUrl="~/Images/moveUp.png" AlternateText="moveUp" runat="server" CssClass="moveUp" ID="moveUp" />
                        </asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>

                <!-- Move Down button -->
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton runat="server" OnClientClick="return false;">
                            <asp:Image ImageUrl="~/Images/moveDown.png" AlternateText="moveDown" runat="server" CssClass="moveDown" ID="moveDown" />
                        </asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>

                <!-- ID Hidden Field -->
                <asp:TemplateField>
                    <ItemTemplate>
                            <asp:HiddenField …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net jquery row html-table

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

Android ListView - 停止在"整个"行位置滚动

对不起令人困惑的标题,我不能非常简洁地表达问题...

我有一个带有ListView的Android应用程序,它使用圆形/"无限"适配器,这基本上意味着我可以根据需要向上或向下滚动它,当它到达顶部或底部时,它们会环绕,使它看起来像对于用户而言,好像他正在旋转无限长的(~100)重复项目列表.

这个设置的目的是让用户选择一个随机项,只需旋转/推送列表视图并等待它停止的位置.我减少了Listview的摩擦力,因此它的速度更快,更长,这看起来非常好.最后,我在ListView的顶部放置了一个部分透明的图像,以阻挡顶部和底部项目(从透明到黑色的过渡),使得看起来好像用户正在"选择"中间的项目,就好像他们他们在一个旋转的"轮子"上,他们通过投掷来控制.

有一个明显的问题:在投掷后,ListView不会停留在特定项目上,但它可以停止在两个项目之间悬停(其中第一个可见项目仅部分显示).我想避免这种情况,因为在这种情况下,哪个项目被"随机选择"并不明显.

简而言之:在ListView完成滚动后完成滚动之后,我希望它停在"整个"行上,而不是停留在部分可见的行上.

现在我通过检查滚动何时停止,然后选择第一个可见项来实现此行为,如下所示:

    lv = this.getListView();

    lv.setFriction(0.005f);
    lv.setOnScrollListener(new OnScrollListener() {
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}

        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) 
            {
                if (isAutoScrolling) return;

                isAutoScrolling = true;
                int pos = lv.getFirstVisiblePosition();
                lv.setSelection(pos);
                isAutoScrolling = false;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

除了一个明显明显的问题之外,这种方法运行得相当好......第一个可见项目可能只对一个或两个像素可见.在这种情况下,我希望ListView为这两个像素"向上"跳转,以便选择第二个可见项.相反,当然,选择第一个可见项,这意味着ListView几乎整个行(减去这两个像素)"向下"跳跃.

简而言之,我希望它跳转到最可见的项目,而不是跳转到第一个可见项目.如果第一个可见项目少于一半可见,我希望它跳转到第二个可见项目.

这是一个有希望传达我的观点的插图.最左边的ListView(每对)显示投掷停止后的状态(停止的位置),右侧ListView显示它通过选择第一个可见项目进行"跳转"后的状态.在左边我显示当前(错误)情况:项目B几乎不可见,但它仍然是第一个可见项目,因此listView跳转以选择该项目 - 这不合逻辑,因为它必须滚动几乎整个项目高度到那里.滚动到项目C(右图所示)会更合乎逻辑,因为它更"接近".

图片http://nickthissen.nl/Images/lv.jpg

我怎样才能实现这种行为?我能想到的唯一方法是以某种方式测量第一个可见项目的可见数量.如果超过50%,那么我跳到那个位置.如果它低于50%,我跳到那个位置+ 1.然而我不知道如何衡量......

有任何想法吗?

android listview scroll

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

Cordova/Ionic构建错误(有时):没有必需的环境

我刚开始涉足Cordova/Ionic,用HTML5/js制作Android/iOS应用程序,到目前为止,我已经有时候使用示例/教程应用程序,但不是每次都有.

我正在使用Windows,我正在尝试为Android构建我的项目.

经过几次尝试,我不再能够构建我的应用程序,甚至完全"空白"模板应用程序,我根本没有改变.我尝试通过Cordova创建应用程序

cordova create hello com.example.hello HelloWorld
cd hello
cordova build android
Run Code Online (Sandbox Code Playgroud)

或离子

ionic start test sidemenu
cd start
ionic build android
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都得到同样的错误:

Running command: C:\Users\nthissen\Dropbox\Mobile\Projects\hello\platforms\andro
id\cordova\build.bat
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: spawn cmd ENOENT
    at exports._errnoException (util.js:746:11)
    at Process.ChildProcess._handle.onexit (child_process.js:1046:32)
    at child_process.js:1137:20
    at process._tickCallback (node.js:355:11)
ERROR building one of the platforms: Error: C:\Users\nthissen\Dropbox\Mobile\Pro
jects\hello\platforms\android\cordova\build.bat: Command failed with exit code 1

You may not have the required environment or OS to build this project
Run Code Online (Sandbox Code Playgroud)

是的,我确实安装了Android …

android cordova ionic-framework ionic

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

WebView使用loadDataWithBaseUrl跳转到锚点

我的Android应用程序使用WebView显示我在"即时"生成的一堆HTML代码.使用以下代码加载HTML代码:

    StringBuilder builder = new StringBuilder();

    // HTML
    builder.append("<html><head><link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">");
    builder.append("</link></head><body>");
    builder.append(getThreadBody());
    builder.append("</body></html>");

    webview.loadDataWithBaseURL("file:///android_asset/", builder.toString(), "text/html", "utf-8", null);
Run Code Online (Sandbox Code Playgroud)

一切都很好.请注意,我没有加载实际的HTML文件,我只是创建一个代表一些(希望是有效的)HTML的字符串并将其加载到WebView中.

无论如何,我生成的HTML('getThreadBody'方法中的部分)包含命名锚点,例如像这样;

<div>
    <a name="949823">Anchor 1</a>
    <div>All kinds of stuff</div>

    <a name="895984">Anchor 2</a>
    <div>...</div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在在某些情况下,我希望WebView在加载HTML后立即导航到其中一个锚点.据我所知,WebView支持导航(在这种情况下滚动)到命名锚点,但问题是没有人点击任何超链接到这些锚点,我希望WebView在加载时滚动(如果那里没有问题)加载HTML和滚动之间的短暂延迟,我的观点是它不应该要求用户交互).

我相信这种行为可以通过使用WebView的loadUrl方法并提供一个带有锚点的URL来实现,例如

webview.loadUrl("file:///android_asset/page.html#895984", ...)
Run Code Online (Sandbox Code Playgroud)

但是,由于我没有将HTML保存到任何文件,我无法使用此方法...当然,将HTML保存到临时文件可能是一个解决方案,但我想保留它作为最后的手段,必须有一个更简单的方法?

我怎样才能做到这一点?谢谢!


已解决 这里是有效的代码.我发现在执行javascript之前让页面加载需要很短的延迟,否则它是50/50是否有效...

    StringBuilder builder = new StringBuilder();

    // HTML
    builder.append("<html><head><link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">");
    builder.append("</link>");
    builder.append("<script>");
    builder.append("function scrollAnchor(id) {");
    builder.append("window.location.hash = id;}");
    builder.append("</script>");
    builder.append("</head><body>");
    builder.append(getThreadBody());
    builder.append("</body></html>");

    webContents.loadDataWithBaseURL("file:///android_asset/", builder.toString(), "text/html", "utf-8", null);

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override …
Run Code Online (Sandbox Code Playgroud)

anchor android scroll webview

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

带有分组项目的ListView - 通过组头复选框选择所有组成员

我正在使用C#和WPF,我有一个ListView,它在第一列中保存带有CheckBox的项目.ListView的ItemsSource在代码中设置(不是通过绑定),并包含一个类'Item'的实例,其属性为'Name','Type'和'Selected'.

public class Item : INotifyPropertyChanged
{
    private string _name;
    private bool _selected;
    private string _type;

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            this.OnPropertyChanged();
        }
    }

    public bool Selected
    {
        get { return _selected; }
        set
        {
            _selected = value;
            this.OnPropertyChanged();
        }
    }

    public string Type
    {
        get { return _type; }
        set
        {
            _type = value;
            this.OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string property = "")
    {
        if (this.PropertyChanged != null) …
Run Code Online (Sandbox Code Playgroud)

c# wpf checkbox listview selected

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

带有MySQL数据库的ASP.NET 5/MVC 6

我计划构建一个将在Linux上托管的MVC 6网站,我目前正处于初始测试阶段,看看新的ASP.NET 5(vNext)和MVC 6是如何工作的,以及我是否可以在Linux上部署所有内容.

我的网站必须使用数据库,因为它将部署在Linux上,显然我不能使用SQL Server.我非常想使用MySQL,但也许有其他选择?我们现在只说,我需要MySQL,除非它不可能.

我意识到这一切仍然处于测试阶段,并没有为生产做好准备,但我只是想做初始设置,以确保在我开始在实际网站上工作之前一切正常.如果没有数据库连接,我不能这样做......

我很快发现,实体框架7还没有MySQL连接器,这是MVC 6使用的.这是否意味着我运气不好,必须等到新的MySQL连接器出来支持EF7?或者我可以在MVC 6网站中恢复到EF6,它支持MySQL吗?我尝试将依赖项添加到EF6但是在默认的MVC 6模板中有很多依赖项,所有引用EF7我完全丢失了,并且根本不知道如何处理它,如果它甚至可能的话.

总结一下:

  • 我可以将EF 7与MySQL一起使用,还是必须等到新的MySQL Connector支持这个?
  • 我可以回退到EF6并仍然使用MVC 6并在Linux上部署(使用Mono)吗?如果是这样,我该如何设置?
  • 如果所有其他方法都失败了 - 我可以在Linux/Mono上使用与MVC 6不同的数据库吗?

mysql mysql-connector entity-framework-core asp.net-core

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

在CollapsingToolbarLayout中设置视差图像的初始高度

我有一个Android活动,它使用CoordinatorLayout内的CollapsingToolbarLayout来实现滚动/折叠工具栏,其中图像作为背景/横幅.

图像是从互联网上加载的,我事先并不知道它的大小.

我希望工具栏最初是一定高度(160dp),但如果图像大于此值,我想让用户进一步向下滚动以显示图像的其余部分.但是,这绝不应该自动发生.初始状态是160dp高度,但用户应该能够向下滚动以进一步增加图像的高度.

我似乎无法找到正确的高度/ minheight组合来实现这一目标.这甚至可能吗?

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="@color/toolbar_text">

    <android.support.design.widget.CoordinatorLayout
            android:id="@+id/coordinatorLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">

        <android.support.design.widget.AppBarLayout
                android:id="@+id/appBarLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fitsSystemWindows="true">

            <android.support.design.widget.CollapsingToolbarLayout
                    android:id="@+id/collapsing_toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed"
                    app:contentScrim="?attr/colorPrimary"
                    android:fitsSystemWindows="true">

                <!-- The background banner -->
                <ImageView
                        android:id="@+id/imgBanner"
                        android:layout_width="match_parent"
                        android:layout_height="160dp"
                        android:scaleType="centerCrop"
                        android:fitsSystemWindows="true"
                        app:layout_collapseMode="parallax"/>

                <android.support.v7.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="?attr/actionBarSize"
                        app:layout_collapseMode="pin"
                        app:theme="@style/AppToolbarTheme" />

            </android.support.design.widget.CollapsingToolbarLayout>

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="fill_vertical"
                android:clipToPadding="false"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" >

                ...
        </android.support.v4.widget.NestedScrollView>

    </android.support.design.widget.CoordinatorLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

横幅图像的高度设置为160dp,它控制工具栏最初的大小,但显然这样我无法将其扩展到160dp之外,因为这是视图的高度.

我尝试将160dp高度设置为CollapsingToolbarLayout或者AppBarLayout没有任何帮助,它总是最大160dp的高度我只能向上滚动(较小的图像)而不是向下,即使图像更大并且ImageView设置为按比例缩放wrap_content.

这是我想要实现的图纸,如果不清楚的话: 我想要的样机

android parallax android-collapsingtoolbarlayout

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

主题化可在棒棒糖之前绘制的选择器

selector我的应用程序中有一个项目用作列表视图行的背景颜色。关键是该行在被点击/触摸时会改变颜色。

因此,选择器使用两个可绘制对象,一个用于按下状态,一个用于常规。文件:rowbgselector.xml在文件夹中res/color

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/rowbg_shape_selected" android:state_pressed="true"/>
    <item android:drawable="@drawable/rowbg_shape" />
</selector>
Run Code Online (Sandbox Code Playgroud)

引用的两个可绘制对象定义res/drawable为具有纯色的简单矩形形状:

文件rowbg_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/row_bg"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

文件rowbg_shape_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="?attr/colorAccent"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

这适用于 Lollipop 设备,但在 Lollipop 之前的任何设备上都失败,并出现一个没有说明太多的错误: Caused by: android.content.res.Resources$NotFoundException: File res/drawable/rowbg_shape_selected.xml from drawable resource ID #0x7f02006c

我认为问题在于这是 Lollipop 中修复的错误,请参见此处:https : //code.google.com/p/android/issues/detail?id=26251

问题是我试图引用attr/colorAccent当然在我的主题中定义的。我有几个不同颜色的主题,用户可以从中选择,并且attr/colorAccent每个主题都不同。然而,似乎由于棒棒糖之前的这个错误,你不能在选择器中引用这样的属性......

我的替代选择是什么?我能想到的唯一选择是为每个主题创建一个单独的选择器 xml 文件,并添加类似的内容attr/bg_selector,然后为每个主题引用正确的选择器文件。这将花费我很长时间,更进一步,更改此选择器的任何内容将需要大量工作(如果稍后我想让颜色稍微变暗或变亮,我将不得不浏览所有这些文件......)。

没有其他选择了吗?

android attr android-theme android-selector

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

ListView在应用ItemContainerStyle时丢失GridView显示

我有一个WPF应用程序,我在其中设置了几个组件,看起来更像是默认的Windows 7风格.现在我想对ListView做同样的事情,因为默认样式(即使在Windows 7上)看起来不太相似.

ListView将其View设置为带有一些GridViewColumns的GridView.没有应用任何样式的ListView的XAML是这样的:

              <ListView ItemsSource="{Binding Series.ServiceSeries.Weeks}">
                <ListView.View> 
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn Header="" DisplayMemberBinding="{Binding WeekNumber}" />
                            <GridViewColumn Header="Start date" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=start}" />
                            <GridViewColumn Header="Track" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=track}" />
                            <GridViewColumn Header="Race length" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=length}" />
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>
Run Code Online (Sandbox Code Playgroud)

在Windows 7上看起来像这样,因为你可以看到颜色略有错误: 1 http://www.nickthissen.nl/Images/Persistent/tmp3DCB.png

所以我决定将自定义样式应用于ListView的ItemContainerStyle.Style是我用于列表的样式的几乎完全副本,除了用ListViewItem替换ListBoxItem:

                    <Style TargetType="{x:Type ListViewItem}" x:Key="ListViewItemStyle">
                    <Setter Property="OverridesDefaultStyle" Value="True" />
                    <Setter Property="SnapsToDevicePixels" Value="True" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListViewItem}">

                                <Border x:Name="Border" CornerRadius="3" BorderThickness="1" SnapsToDevicePixels="True">
                                    <Border x:Name="InnerBorder" CornerRadius="2" BorderBrush="Transparent" Background="Transparent" …
Run Code Online (Sandbox Code Playgroud)

wpf listview gridview itemcontainerstyle

3
推荐指数
1
解决办法
1906
查看次数