আমি কীভাবে ডেটাগ্রিডে একটি নির্বাচিত সারির রঙ সেট করতে পারি


127

ডেটাগ্রিডে নির্বাচিত সারির ডিফল্ট পটভূমির রঙটি এতই গা dark় যে আমি এটি পড়তে পারি না। এটিকে ওভাররাইড করার কোনও উপায় আছে কি?

এই চেষ্টা

<dg:DataGrid.RowStyle>
    <Style TargetType="{x:Type dg:DataGridRow}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True" >
                <Setter Property="Background" Value="Gainsboro" />
            </Trigger>
        </Style.Triggers>
    </Style>
</dg:DataGrid.RowStyle>

কিন্তু এখনও কিছুই না ...


আপনি যখন 'এটি চেষ্টা করেছেন' বলছেন তখন আপনি বোঝানোর চেষ্টা করেছেন এবং এটি কার্যকর হয়নি?
কর্নেল আতঙ্ক

2
হ্যাঁ এর অর্থ কী এটি @ কলোনেলপ্যানিক
co2f2e

উত্তর:


155

উপরের সমাধানটি আমার ক্ষেত্রে প্রতিটি কক্ষের চারপাশে নীল সীমানা রেখে দেয়।

এটি আমার জন্য কাজ করা সমাধান। এটি খুব সহজ, আপনার এটিতে এটি যুক্ত করুন DataGrid। আপনি এটিকে SolidColorBrushঅন্য যে কোনও ব্রাশ যেমন লিনিয়ার গ্রেডিয়েন্টে পরিবর্তন করতে পারেন ।

<DataGrid.Resources>
  <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
                   Color="#FF0000"/>
</DataGrid.Resources>

নিখুঁত - ঠিক আমার যা প্রয়োজন ছিল আমাকে ডিজিজের জন্য বিদ্যমান শৈলীর রেফারেন্স চালিয়ে যাওয়ার এবং একটি নির্বাচিত সারির জন্য ব্যাকগ্রাউন্ড ব্রাশটি পরিবর্তন করার অনুমতি দিয়েছে।
গাটমান্ডো

5
wounderfull। অগ্রভাগের রঙের সাথে একই কীভাবে করবেন তার কোনও ধারণা?
আর্সেন জহরে

8
আর্সেন, কেবলমাত্র সিস্টেমলাইনগ্রাউন্ডের জন্য ব্রাশটি ওভাররাইড করুন igh পাঠ্যের রঙ সেট করতে একই পদ্ধতিতে হাইলাইটটেক্সট ব্রাশকি।
বেন ম্যাকিনটোস

আমি যদি ডেটাবাইন্ডিংয়ের মাধ্যমে পুরো সারিটি নির্বাচন না করি যেমন <DataGrid>ItemsSource="{Binding Path=MySelector}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"সারিটি কেবল লাইটগ্রি। একটি সিস্টেমলাইন আছে কি? ´
রোলফি

6
যদি এটা ফোকাস নেই অবশেষে এক পাওয়া যায়নি: SystemColors.ControlBrushKey
রোলফি

100

বুঝেছি. ডেটাগ্রিডের মধ্যে নিম্নলিখিতগুলি যুক্ত করুন es উত্স বিভাগ:

  <DataGrid.Resources>
     <Style TargetType="{x:Type dg:DataGridCell}">
        <Style.Triggers>
            <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
                <Setter Property="Background" Value="#CCDAFF" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>

এটি দুর্দান্ত, আমি কেবল এটির মধ্যে দৌড়ে এসেছি এবং আমি হতাশ হচ্ছিলাম :-)
রব

6
আপনি কোন বিভাগে রাখেন?
কর্নেল আতঙ্ক

7
যেহেতু BorderBrushঅবশেষটি নীল থাকে, যদি এটি কাউকে বিরক্ত করে, তবে অন্য একটি Setterউপাদান যুক্ত করুন, যা BorderBrushনির্ভরতা সম্পত্তিটিকে একই রঙের (মান) হিসাবে সেট Backgroundকরে।
কাই

75

@ এসেব কেডের উত্তরের প্রতিরোধ হিসাবে, আপনি নিম্নলিখিতটি ব্যবহার করে নির্বাচিত এবং নির্বাচিত সারিগুলির রঙগুলি পুরোপুরি নিয়ন্ত্রণ করতে পারেন Style:

<Style TargetType="{x:Type DataGridRow}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
    </Style.Resources>
</Style>

আপনি অবশ্যই যে কোনও রঙ প্রবেশ করতে পারেন। এটি Styleঅন্যান্য সংগ্রহের আইটেমগুলির জন্যও কাজ করবে যেমন ListBoxItem( উদাহরণস্বরূপ আপনি যদি প্রতিস্থাপন TargetType="{x:Type DataGridRow}"করেন TargetType="{x:Type ListBoxItem}")।


6
আপনার সমাধান সেরা এক।
বিকাশকারী

সুন্দর, শেরিডান আমি নির্বাচিত সারিতে আমার সারিটির সম্মুখভাগের রঙটিও চাই। তবে এটি ডিফল্ট হাইলাইটটেক্সট ব্রাশকে (যেমন কালো) নেয়। কি করো?
ডেথ্রেস

1
@ ডেথ্রেস.ডজে, যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আমার উদাহরণের মধ্যে Colorআপনার তৃতীয়টির সম্পত্তিটি আপনার পছন্দমতো রঙে বদলাতে হবে SolidColorbrush। এই ঘোষণা ব্যবহার আসলে রঙ সেটিং করা হয় SolidColorbrushযে SystemColors.HighlightTextBrushKeyব্যবহারসমূহ। Foregroundআপনি অন্য Styleকোথাও রঙ সেট না করে থাকলেও সাবধান হন কারণ এটি Resourcesউপরের সেটিংসগুলিকে ওভাররাইড করতে পারে ।
শেরিডান

ধন্যবাদ, আমি ঠিক এটিই খুঁজছিলাম!
এনিরিকো

আপনি এর জন্য স্বচ্ছ ব্রাশ সেট করতেও চাইতে পারেন SystemColors.InactiveSelectionHighlightBrushKey, বা গ্রিডটি ফোকাস হারিয়ে ফেললে সারিটি হাইলাইট হবে
dlf

19

আমার এই সমস্যাটি ছিল এবং আমি প্রায় আমার চুল ছিঁড়ে ফেলেছিলাম, এবং আমি নেটটিতে উপযুক্ত উত্তর খুঁজে পেতে সক্ষম হইনি। আমি একটি ডাব্লুপিএফ ডেটাগ্রিডে নির্বাচিত সারির পটভূমির রঙটি নিয়ন্ত্রণ করার চেষ্টা করছিলাম। এটি কেবল এটি করবে না। আমার ক্ষেত্রে, কারণটি ছিল আমার আমার ডেটাগ্রিডে একটি সেলস্টাইলও ছিল এবং সেল স্টাইল আমার দ্বারা নির্ধারিত রোস্টাইলকে ওভাররড করেছিল। মজার ব্যাপারটি হল, কারণ সেলস্টাইল এমনকি পটভূমির রঙও সেট করে নি the তবুও, নির্বাচিত সারির ব্যাকগ্রাউন্ড রঙ সেট করার চেষ্টা করা আমি কাজটি করার সময় মোটেই কার্যকর হয়নি:

        <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
            </Style>
        </DataGrid.CellStyle>

এবং যখন আমি নির্বাচিত সারিটির জন্য পছন্দসই শৈলীটি সারি শৈলীর বাইরে এবং ঘর স্টাইলে স্থানান্তরিত করেছি তখন এটি কার্যকর হয়েছিল:

    <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>

কারওর একই সমস্যা হলে স্রেফ এটি পোস্ট করা।


প্রতিবার এটি ঘটে, ঘর একটি অগ্রভাগ সেট করে এবং প্রতিটি দেহ সারিকে লক্ষ্য করে।
ইরান otzap

1
আমি এটিতেও ছুটে এসেছি, এবং আমি এমনকি সেলস্টাইল সেটও করছি না। আমি যখন সারি শৈলীতে এটি সেট করার চেষ্টা করেছি তখন এটি কেবল অ-সেল উপাদানগুলিকেই প্রভাবিত করেছিল।
বিগস্যান্ডউইচ

12

ডিফল্ট ইসসলেক্ট ট্রিগার 3 বৈশিষ্ট্য, পটভূমি, সম্মুখভাগ এবং সীমান্ত ব্রাশ পরিবর্তন করে। আপনি যদি সীমান্তের পাশাপাশি পটভূমি পরিবর্তন করতে চান তবে এটি আপনার স্টাইল ট্রিগারে অন্তর্ভুক্ত করুন।

<Style TargetType="{x:Type dg:DataGridCell}">
    <Style.Triggers>
        <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
            <Setter Property="Background" Value="#CCDAFF" />
            <Setter Property="BorderBrush" Value="Black" />
        </Trigger>
    </Style.Triggers>
</Style>

@ মার্ক এইচ, গেমের এই দেরিতে এই উত্তরে বড় পরিবর্তন করার পরিবর্তে আপনার নিজের উত্তর যুক্ত করা উচিত।
মাইকেল পেট্রোটা 26'11

9

সারি নির্বাচিত ইভেন্টটি কাজ না করার কারণে আমি যে কারণে অভিজ্ঞতা অর্জন করেছি of

  1. স্টাইলটি ডেটাগ্রিডসেলের জন্য সেট আপ করা হয়েছে
  2. টেম্প্লেটেড কলামগুলি ব্যবহার করে
  3. ট্রিগার ডেটাগ্রিডে সেট আপ করা হয়েছে

এটিই আমাকে সাহায্য করেছিল। ডেটাগ্রিডসেলের জন্য স্টাইল সেট করা

<Style TargetType="{x:Type DataGridCell}">
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Background" Value="Green"/>
      <Setter Property="Foreground" Value="White"/>
    </Trigger>
  </Style.Triggers> 
</Style>

এবং যেহেতু আমি ভিতরে কোনও লেবেল সহ একটি টেম্পলেট কলামটি ব্যবহার করছিলাম, তাই আমি রিলেটিভসোর্স বাঁধাই ব্যবহার করে পূর্বের সম্পত্তিটি ধারক ফোরগ্রাউন্ডে আবদ্ধ করেছি:

<DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Label Content="{Binding CategoryName,
                 Mode=TwoWay,
                 UpdateSourceTrigger=LostFocus}"
             Foreground="{Binding Foreground,
                 RelativeSource={RelativeSource Mode=FindAncestor,
                     AncestorLevel=1, 
                     AncestorType={x:Type DataGridCell}}}"
             Width="150"/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

4

আমি কন্ট্রোল ব্রাশকে চেষ্টা করেছি কিন্তু এটি নির্বাচিত সারিগুলির জন্য কাজ করে না। অনির্বাচিত সারির পটভূমি এখনও সাদা ছিল। তবে আমি এটি সন্ধান করতে পেরেছি যে আমাকে রো-স্টাইলটি ওভাররাইড করতে হবে।

<DataGrid x:Name="pbSelectionDataGrid" Height="201" Margin="10,0"
          FontSize="20" SelectionMode="Single" FontWeight="Bold">
    <DataGrid.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDD47C"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFA6E09C"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Violet"/>
    </DataGrid.Resources>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="LightBlue" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

2

আমি এই সমস্যার সাথে এক দিনের আরও ভাল অংশ কাটিয়েছি। ডেটাগ্রিডে রবব্যাকগ্রাউন্ড সম্পত্তিটি পরিণত হয়েছে - যা আমি সেট করেছিলাম - এটিকে পরিবর্তন করার জন্য সমস্ত প্রচেষ্টা ওভাররাইড করে। যত তাড়াতাড়ি আমি এটি মুছে ফেলা, সবকিছু কাজ করে। (একইভাবে ডেটাগ্রিডটেক্সটকালামে সেট ফরওয়ারগ্রাউন্ডে যায়)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.