1

リストビューのアイテムの前景を変更する方法(背景も変更できます)。Excelを開いて、指定されたシートの壊れたリンクをチェックするプログラムがあります。指定されたリンクのリストと、これまでに壊れたものをユーザーに表示したい。前景をREDに変更したい。値をobservablecollectionにバインドしました。コレクションは単なる文字列のコレクション (WEB リンク) であり、正常に動作しています

ここのようにマルチバインディングを行うべきですか

編集:- これにはもう1つの問題があります。プロパティを作成し、すべての変更を行った後。WPF フォームが値で更新されていません。つまり、リスト ボックスがいっぱいになりません。どちらも着色が起こっていません(私がそれらを見ることができないので、それも起こっているかどうかはわかりません)。

これが私のコードです。私のコーディングを許してください私はWPFが初めてです

<Window x:Class="URLValide.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Local="clr-namespace:URL_Validater.URLValide"
Title="URL Validator" Height="269" Width="525" FontSize="13"
ResizeMode="NoResize">

<Window.Resources>
    <ResourceDictionary>
        <Style x:Key="HighLight" TargetType="{x:Type Control}">
            <Setter Property="Background" Value="Honeydew"/>
            <Setter Property="FontWeight" Value="UltraBlack"/>
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect BlurRadius="40" Color="Beige" Direction="50" Opacity="0.5"/>                                
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Background" Value="White"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>
</Window.Resources>

<DockPanel LastChildFill="True">
    <Label DockPanel.Dock="Top" Name="WinHeader"  Height="30" Background="BurlyWood" FontFamily="Calibri" FontSize="20" FontWeight="Bold" FontStretch="Medium" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Top">URL Validator</Label>
    <Grid DockPanel.Dock="Bottom" Background="Beige">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="20" MaxHeight="30"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Text="Current URL:"></TextBlock>
        <TextBlock Grid.Column="1"  Text="{Binding strCrnUrl}"  Width="370"></TextBlock>
        <TextBlock Grid.Column="2"  Text="10 of 100" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
    </Grid>
    <Grid DockPanel.Dock="Right" Width="154">
        <Grid.ColumnDefinitions>
            <ColumnDefinition MaxWidth="300" Width="19*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition MaxHeight="55" MinHeight="10" Height="35*" />
            <RowDefinition Height="165*"  MinHeight="10"  />
        </Grid.RowDefinitions>

        <Label Name="LbleRight" BorderBrush="Black" BorderThickness="1" Margin="0,2" FontSize="13" Content="List Of URL's" Height="30" Grid.ColumnSpan="2" Grid.Row="0"></Label>
        <ListView Grid.Row="1" Background="Azure" ItemsSource="{Binding strPdfLst}" IsEnabled="True" Margin="0,0,0,1"></ListView>            
    </Grid>

    <Grid DockPanel.Dock="Left">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="30*" />
            <RowDefinition Height="60*" />                
        </Grid.RowDefinitions>            
        <Label BorderBrush="Black" Name="lblFleSel" BorderThickness="1" Height="27" Margin="2,2,0,30" HorizontalAlignment="Left" Width="349">Select File To which Contains the list of URL's:</Label>
        <TextBox Name="txtbxFleNme" BorderBrush="Black" BorderThickness="1" Margin="2,34,0,0" Style="{StaticResource ResourceKey=HighLight}" HorizontalAlignment="Left" Width="272"></TextBox>
        <Button Name="btnFleSlec" Width="69" Height="27" Content="Browse" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="276,32,4,0"></Button>
        <Grid Grid.Row="1" Height="118" HorizontalAlignment="Left" Margin="0,1,0,0" Name="OptionGrid" VerticalAlignment="Top" Grid.RowSpan="2">
            <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Horizontal">
                <Border BorderBrush="Black" BorderThickness="1" Height="117" Margin="3,1,0,0" HorizontalAlignment="Stretch" Width="350">
                    <!--<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Width="162" Height="118">                        
                    </StackPanel>-->
                    <Grid Height="auto" HorizontalAlignment="Stretch" Width="335">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="10*"/>
                            <RowDefinition Height="10*"/>
                            <RowDefinition Height="10*"/>
                            <RowDefinition Height="10*"/>
                            <RowDefinition Height="10*"/>
                        </Grid.RowDefinitions>
                        <CheckBox Name="chkboxHas" VerticalAlignment="Center" HorizontalAlignment="Center">Has Column Headers</CheckBox>
                        <Label Name="lblDesc" Height="auto" Margin="0,0,204,0" Grid.Row="1" HorizontalContentAlignment="Right" VerticalAlignment="Top">Description Column:</Label>
                        <ComboBox Grid.Row="1" Name="cmboxDescol"  Margin="131,0,0,0" Style="{StaticResource ResourceKey=HighLight}"></ComboBox>
                        <Label Name="lblUrlCol" Height="auto" Grid.Row="2" Margin="0,0,204,0" HorizontalContentAlignment="Right">URL's Column:</Label>
                        <ComboBox Name="cmboxUrlCol" Grid.Row="2" Margin="131,0,0,0" Style="{StaticResource ResourceKey=HighLight}"></ComboBox>
                        <Label Name="lblResCol" Height="auto" Grid.Row="3" Margin="0,0,196,0" HorizontalContentAlignment="Right">Result Column:</Label>
                        <ComboBox Name="cmboxResCol" Grid.Row="3" Margin="131,0,0,0" Style="{StaticResource ResourceKey=HighLight}"></ComboBox>
                        <Button Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Validate URL links" Name="btnValidate"></Button>
                    </Grid>
                </Border>                    
            </StackPanel>
        </Grid>
    </Grid>
</DockPanel>

完全なコードを投稿する必要があるかどうかわかりません。しかし、ここに私のクラスがあり、ボタンをクリックするとプログラムが開始されます。

私のクラスコード:-

    Imports Microsoft
Imports System
Imports System.Net
Imports System.Data
Imports System.Windows
Imports System.Windows.Forms
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Collections.ObjectModel
Imports System.ComponentModel

Namespace URLValide

    Public Class clsUrlCheck
        Implements INotifyPropertyChanged

        Public Event propertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

        Public exclApplic As New Excel.Application
        Public exclWkbOpe As Excel.Workbook
        Public exclWksAct As Excel.Worksheet
        Public exclRngUrl As Excel.Range
        Public exclRngDes As Excel.Range
        Public exclRngOut As Excel.Range
        Public intMaxRow As Long
        Public intCrtRow As Long
        Private _strTotlOf As String
        Private _strCrnUrl As String
        Private _ColorIndx As String
        Private _strPdfLst As ObservableCollection(Of String)
        Private _strhdrPdf As ObservableCollection(Of String)

#Region "Region of poperties"
        Public Property strTotlOf() As String
            Get
                Return _strTotlOf
            End Get
            Set(ByVal value As String)
                _strTotlOf = value
                Me.OnPropertyChanged("strTotlOf")
            End Set
        End Property

        Public Property strCrnUrl() As String
            Get
                Return _strCrnUrl
            End Get
            Set(ByVal value As String)
                _strCrnUrl = value
                Me.OnPropertyChanged("strCrnUrl")
            End Set
        End Property

        Public Property strPdfLst As ObservableCollection(Of String)
            Get
                Return _strPdfLst
            End Get
            Set(ByVal value As ObservableCollection(Of String))
                _strPdfLst = value
                Me.OnPropertyChanged("strPdfLst")
            End Set
        End Property

        Public Property strhdrPdf As ObservableCollection(Of String)
            Get
                Return _strhdrPdf
            End Get
            Set(ByVal value As ObservableCollection(Of String))
                _strhdrPdf = value
                Me.OnPropertyChanged("strhdrPdf")
            End Set
        End Property

        Public Property ColorIndx As String
            Get
                Return _ColorIndx
            End Get
            Set(ByVal value As String)
                _ColorIndx = value
                Me.OnPropertyChanged("ColorIndx")
            End Set
        End Property

        Private Sub OnPropertyChanged(ByVal propertyName As String)
            RaiseEvent propertyChanged(Me, New PropertyChangedEventArgs(propertyName))
        End Sub
#End Region

#Region "function of Validating the URL's"
        Public Function UrlCheck(ByVal strUrlReq As String)

            Try

                Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(strUrlReq)
                WebReq.Method = "Head"
                WebReq.Timeout = 5000
                Using Response = WebReq.GetResponse()
                    Return True
                End Using

            Catch ex As Exception
                ColorIndx = "True"
                Return False

            End Try

        End Function
#End Region

#Region "Start Function"
        Sub suStart()
            Dim blnValid As Boolean


            'strPdfLst.Clear()
            'strPdfLst = makeList(exclRngUrl.Column, False)
            If exclRngDes.Value = "Make Desc" Then
                strPdfLst = makeList(exclRngUrl.Column, True)
                exclRngDes.Delete()
            Else
                strPdfLst = makeList(exclRngUrl.Column, False)
            End If

            For Each exclRngEch As Excel.Range In exclRngUrl
                strCrnUrl = exclRngEch.Text
                strTotlOf = exclRngEch.Row & "OF" & intMaxRow
                blnValid = UrlCheck(exclRngEch.Value.ToString)
                If blnValid Then
                    exclWksAct.Cells(exclRngEch.Row, exclRngOut.Column).value = "Web Page Present"
                Else
                    exclWksAct.Cells(exclRngEch.Row, exclRngOut.Column).value = "Web Page Error"

                End If

            Next


        End Sub

        Function makeList(ByVal intColNum As Long, ByVal blnMkeStr As Boolean) As ObservableCollection(Of String)

            Dim ObsColTem As ObservableCollection(Of String) = New ObservableCollection(Of String)

            If Not blnMkeStr Then
                For intLopCnt As Int32 = intCrtRow To intMaxRow
                    ObsColTem.Add(exclWksAct.Cells(intLopCnt, intColNum).Text)
                Next
            Else
                For intLopCnt As Int32 = intCrtRow To intMaxRow
                    Dim strDesc As String = Mid(exclWksAct.Cells(intLopCnt, intColNum).Text, InStrRev(exclWksAct.Cells(intLopCnt, intColNum).Text, "/", , CompareMethod.Text) + 1)
                    ObsColTem.Add(strDesc)
                Next
            End If
            Return ObsColTem
        End Function
#End Region

    End Class
End Namespace
4

3 に答える 3

7

これは作業コードからのものです

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=RowSelected}" Value="True">
                <Setter Property="Background" Value="Gainsboro"  />
                <Setter Property="FontWeight" Value="Bold" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>
于 2013-03-05T13:47:28.230 に答える
1

リンクをパラメーターとして受け取り、背景/前景色を送信するコンバーターを作成します。コンバーターはリンクをチェックし、それに応じて正しいコードを送信し、カラー コードを itemtemplate の背景/前景プロパティにバインドします。

于 2013-03-05T12:46:07.900 に答える
0

最初にバインドできる Broken-Property を作成し、Broken-Property で DataTrigger を使用して ListViewItems のスタイルを作成します。

<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
            <DataTrigger Binding="{Binding Broken}" Value="True">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="White"/>
            </DataTrigger>
</Style.Triggers>
</Style>

このコードはテストしていませんが、動作するはずです!

于 2013-03-05T09:23:37.540 に答える