2010-11-17 12 views
6

को प्रभावित करता है यह सबसे नज़दीक है कि मैं इस पर एक सरल ट्रिगर बनाने आया हूं। मैं बस बटन दिखाने के लिए डेटाग्रिड के IsMouseOver == सच चाहता हूँ। समस्या यह है कि सेटर का लक्ष्य नाम कहता है: 'लक्ष्य नाम' संपत्ति 'सेटर' के लिए एक वैध लक्ष्य का प्रतिनिधित्व नहीं करती है क्योंकि 'बटन एक्सपैंड' नामक तत्व नहीं मिला था। सुनिश्चित करें कि किसी भी सेटर्स, ट्रिगर या शर्तों का उपयोग करने से पहले लक्ष्य घोषित किया गया है। मैं क्या गलत कर रहा हूँ?एक ऑब्जेक्ट पर एक साधारण wpf ट्रिगर बनाएं जो

<UserControl.Resources> 
    <Style TargetType="DataGrid"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter TargetName="ButtonExpand" Property="Visibility" Value="Visible" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 
<Grid> 



    <DataGrid Name="MainDataGrid" ItemsSource="{Binding Programs}" IsReadOnly="True" AutoGenerateColumns="false" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
      <DataGridTextColumn Header="Version" Binding="{Binding Version}"/> 
      <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

    <Button Name="ButtonExpand" Height="25" Width="25" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="Hidden">+</Button> 
</Grid> 

उत्तर

21

टार्गेटनाम एक शैली का ट्रिगर संग्रह के भीतर उपयोग के के लिए इरादा नहीं है। एक शैली में नामस्थान नहीं है, इसलिए वहां नाम से तत्वों का संदर्भ देने के लिए समझ में नहीं आता है। लेकिन एक टेम्पलेट (या तो डेटा टेम्पलेट या कंट्रोल टेम्पलेट) में नामस्थान है।

this लिंक देखें।

आप इसे बटन के लिए डेटाट्रिगर के साथ दूसरी तरफ कर सकते हैं। ध्यान दें कि आपको डेटा ट्रिगर के काम के लिए शैली के भीतर संपत्ति दृश्यता सेट करनी होगी।

<Grid Name="MainGrid"> 

    <DataGrid ItemsSource="{Binding Programs}" 
       IsReadOnly="True" 
       AutoGenerateColumns="false" > 
     <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
     <DataGridTextColumn Header="Version" Binding="{Binding Version}"/> 
     <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

    <Button Name="ButtonExpand" 
      Height="25" 
      Width="25" 
      HorizontalAlignment="Right" 
      VerticalAlignment="Bottom" 
      Content="+"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="Visibility" Value="Hidden"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=MainGrid, 
                Path=IsMouseOver}" 
           Value="True"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</Grid> 

करने के लिए यह एक कनवर्टर के साथ डेटा ग्रिड के IsMouseOver संपत्ति को ButtonExpand के visibilty बाध्य करने के लिए किया जाएगा एक और तरीका है।

+0

जब माउस बटन पर है तो यह झिलमिलाहट करता है। – Bluebaron

+0

यह ज्यादातर सही है। मैं आपका उत्तर प्रोप नहीं दे सकता क्योंकि मेरे पास स्तर 15 या कुछ नहीं है। मैंने नीचे अपना उत्तर पोस्ट किया लेकिन मैं इसे 2 दिनों के उत्तर के रूप में क्लिक नहीं कर सकता। बहुत बहुत धन्यवाद। आप निश्चित रूप से इसके उत्तर के लायक हैं लेकिन मैं किसी भी प्रश्न के साथ किसी को भी पेंच नहीं करना चाहता हूं। – Bluebaron

+1

@ ब्लूबरन: मैंने आपके दो परिवर्तन मेलेक के जवाब में संपादित किए हैं, इसलिए अब आप अपना उत्तर हटा सकते हैं और उसे सही के रूप में चिह्नित कर सकते हैं। दो परिवर्तनों को संकुचित कर दिया गया -> छुपा, मेनडाटा ग्रिड -> मेनग्रिड, और आसपास के कोड को जोड़ने के लिए जहां मेनग्रिड परिभाषित किया गया है। –

0
<Grid Name="MainGrid"> 

    <DataGrid ItemsSource="{Binding Programs}" IsReadOnly="True" AutoGenerateColumns="false" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
      <DataGridTextColumn Header="Version" Binding="{Binding Version}"/> 
      <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

    <Button Name="ButtonExpand" Margin="0,0,20,20" Height="25" Width="25" HorizontalAlignment="Right" VerticalAlignment="Bottom" Content="+"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="Visibility" Value="Hidden"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=MainGrid, 
              Path=IsMouseOver}" 
         Value="True"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

</Grid> 
+0

में परिवर्तनों के साथ काम करता है मैंने आपके दो बदलावों को मेलेक के जवाब में संपादित किया है, इसलिए अब आप इस उत्तर को हटा सकते हैं और मेलेक के जवाब को सही के रूप में चिह्नित कर सकते हैं। –

संबंधित मुद्दे