none
Nach klicken auf Border soll diese mit Inhalt verschwinden.

    Frage

  • Hallo,

    Ich versuche irgendwie eine Border mit einem textBlock als Child, die im Code eingefügt wird, dann zu löschen, wenn auf diese geklickt wird. Leider habe ich dabei ein Problem.

    Ich weiß nicht wie ich erkennen kann, welche Border, von mehreren potenziellen (gespeichert in einem Stackpanel), angeklickt wurde, und weiß deshalb nicht, welche ich zu löschen habe.

    Mfg Mattis Brooker



    Mittwoch, 7. März 2018 19:27

Antworten

  • Ich habe eigentlich 0 Ahnung von C++. Aber ich habe es dennoch hinbekommen ;)

    void App7::MainPage::Border_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
    {
    	try
    	{
    		Border^ b = (Border^)sender;
    		StackPanel^ stack = (StackPanel^)b->Parent;
    		uint32_t index = 0;
    		if (stack->Children->IndexOf(b, &index))
    		{
    			stack->Children->RemoveAt(index);
    		}
    	}
    	catch (const std::exception&)
    	{
    			
    	}
    }


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Donnerstag, 8. März 2018 14:35

Alle Antworten

  • Hallo Mattis,

    bei einem Tapped Event bekommst Du das Element auf das geklickt wurde übergeben. Hier mal ein Beispiel

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel>
            <Border BorderBrush="Black" BorderThickness="1" Tapped="Border_Tapped">
                <TextBlock Text="Test" />
            </Border>
            <Border BorderBrush="Black" BorderThickness="1" Tapped="Border_Tapped">
                <TextBlock Text="Test" />
            </Border>
            <Border BorderBrush="Black" BorderThickness="1" Tapped="Border_Tapped">
                <TextBlock Text="Test" />
            </Border>
        </StackPanel>
    </Grid>

    private void Border_Tapped(object sender, TappedRoutedEventArgs e)
    {
        if (sender is Border b)
        {
            var parent = b.Parent as StackPanel;
            parent.Children.Remove(b);
        }
    }


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 8. März 2018 07:46
  • Hallo, diese Idee hatte ich auch schon. Leider mache ich das ganze in C++ und dementsprechent funktioniert das so nicht. Dinge wie "is" und "as" kann ich nicht benutzen. Da ich aber weiß dass das Stackpanel den namen MainPanel hat, habe ich den parent ja schon. Leider gibt es in C++ aber kein "remove", nur "removeAt", was den Index des zu löschenden Objektes will, welchen ich nicht habe.

    EDIT: Ich glaube ich habe den Code so gut wie möglich übersetzt:

    void MainPage::Border_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
    {
    	Border^b;
    	if (sender == b)
    	{
    		auto parent = b->Parent;
    		((StackPanel^)parent)->Children->RemoveAt(/*es werden nur int angenommen*/);
    	}
    }
    trotzdem besteht das problem der fehlenden "remove" methode

    Donnerstag, 8. März 2018 13:31
  • Ich habe eigentlich 0 Ahnung von C++. Aber ich habe es dennoch hinbekommen ;)

    void App7::MainPage::Border_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
    {
    	try
    	{
    		Border^ b = (Border^)sender;
    		StackPanel^ stack = (StackPanel^)b->Parent;
    		uint32_t index = 0;
    		if (stack->Children->IndexOf(b, &index))
    		{
    			stack->Children->RemoveAt(index);
    		}
    	}
    	catch (const std::exception&)
    	{
    			
    	}
    }


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Donnerstag, 8. März 2018 14:35
  • Danke, das ist genau was ich gesucht habe.
    Donnerstag, 8. März 2018 15:31