Ich habe in einem Projekt das Problem, dass Elemente per Drag and Drop von einer Liste in eine andere Liste verschoben werden sollen, ich aber in der Zielliste nicht alle Quellelemente erlaiben will. Das könnte im XAML also so aussehen: <UserControl
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:msWindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit"
xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
x:Class="DragAndDrop.MainPage"
mc:Ignorable="d" d:DesignWidth="467"
d:DesignHeight="225" Background="#FFDEDEDE"
BorderBrush="#FFEA4747" BorderThickness="1" FontSize="18"
>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<controlsToolkit:ListBoxDragDropTarget
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
x:Name="DragSource">
<ListBox x:Name="lbSource" DisplayMemberPath="Name" />
</controlsToolkit:ListBoxDragDropTarget>
<controlsToolkit:ListBoxDragDropTarget
Grid.Column="1"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
x:Name="DragDest"
msWindows:DragDrop.AllowDrop="true">
<ListBox x:Name="lbDest" DisplayMemberPath="Name" />
</controlsToolkit:ListBoxDragDropTarget>
</Grid>
</UserControl>
und hier ist der passende Codebehind für den DragOver event, der die Elemente prüft:
Imports Microsoft.Windows
Imports System.Collections.ObjectModel
Partial Public Class MainPage
Inherits UserControl
Public Sub New()
InitializeComponent()
Dim Persons As New List(Of Person)
Persons.Add(New Person With {.Name = "Hans Meiser", .IsAllowed = False})
Persons.Add(New Person With {.Name = "Günther Jauch", .IsAllowed = False})
Persons.Add(New Person With {.Name = "James Brown", .IsAllowed = True})
Persons.Add(New Person With {.Name = "Elvis", .IsAllowed = True})
Persons.Add(New Person With {.Name = "Marianne und Michael", .IsAllowed = False})
lbSource.ItemsSource = Persons
DragDest.AllowedSourceEffects = DragDropEffects.Copy
End Sub
Private Sub DragDest_DragOver(ByVal sender As Object, _
ByVal e As Microsoft.Windows.DragEventArgs) _
Handles DragDest.DragOver
'--ignore Sort Events
If e.Effects = 3 Then Return
'--Fetch Selection
Dim Args As ItemDragEventArgs = e.Data.GetData(e.Data.GetFormats()(0))
Dim Sel As SelectionCollection = Args.Data
'--Build Persons from Selection
Dim Persons = (From Pe In Sel Select DirectCast(Pe.Item, Person)).ToList
'--Handle Drag Event
If (From P In Persons Where Not P.IsAllowed).Count > 0 Then
e.Handled = True
e.Effects = DragDropEffects.None
End If
End Sub
End Class
Mehr dazu gibt’s bei stackoverflow.com oder direkt hier
17f57af5-c78f-4389-a9ad-29db4de85562|0|.0
Ich hatte das Problem, dass ein Control (welches natürlich wieder in anderen Controls liegt) und das per Code erzeugt wird, eine nicht statische Methode an der Page aufrufen soll. Daher brauche ich natürlich irgendwie die aktuelle Instanz der Page. Das geht in dem Control so: DirectCast(App.Current.RootVisual, Page).MethodToCall()
fe52bf7a-9cbb-40b5-92e2-7ae7dab96e20|0|.0
in einem Silverlight Projekt hatten wir die Notwendigkeit, eine Textbox zu benutzen, die nur die Eingabe einer Fliesskommazahl (in dem Fall eines Währungwertes) zu erlauben. Da wir nicht dringend eine externe Komponente einsetzen wolllten habe ich das Problem mit folgendem Code gelösst: Dabei wird im New-Event des Controls ein KeyDown-Event an die Textbox gebunden, der bei jesem Tastendruck überprüft, ob es ein für eine Fliesskommazahl gültiges Zeichen ist. Leider ist das “,” nicht in der Key Enumeration, und muss händisch über den KeyCode abgehandelt werden. Dabei ist zu beachten, dass das “,” in 3 Varianten abgefragt werden muss: normales “,”, Zehnertastatus und auf dem Mac gibts (wie sollte es anders sein) einen anderen Zahlencode für das “,”. und hier der Codesnippet: Public Sub New()
InitializeComponent()
AddHandler tbTbx.KeyDown, AddressOf OnlyNumbers
End Sub
Public Sub OnlyNumbers(ByVal sender As Object, ByVal e As KeyEventArgs)
Select Case e.Key
Case Key.Tab
Return
Case Key.D0
Case Key.D1
Case Key.D2
Case Key.D3
Case Key.D4
Case Key.D5
Case Key.D6
Case Key.D7
Case Key.D8
Case Key.D9
Case Key.NumPad0
Case Key.NumPad1
Case Key.NumPad2
Case Key.NumPad3
Case Key.NumPad4
Case Key.NumPad5
Case Key.NumPad6
Case Key.NumPad7
Case Key.NumPad8
Case Key.NumPad9
Case Key.Decimal ' ,
Case Else
Select Case e.PlatformKeyCode
Case 188, 110, 43 ' ",", ", Numpad" , ", Mac"
If tbTbx.Text.IndexOf(",") > -1 Then
e.Handled = True
Return
End If
Case Else
e.Handled = True
Return
End Select
End Select
End Sub
497ad4e4-f9e3-473d-9a69-b725fb1604eb|0|.0
Wwnn Silverlight einen Webservice über SSL benutzen soll, müssen dazu folgende 3 Dinge beachtet werden: 1) eine clientaccesspolicy.xmlim Webroot haben: <?xml version="1.0" encoding="utf-8" ?>
2) eine crossdomain.xml im Webroot haben:
<?xml version="1.0"?>
3) im Silverlight:
ich benutze dazu meisst eine Statische Methode, die den Webservice erstellt, um die jeweilige URL vom System an die Umgebung anpassen zu können.
Public Shared Function GetWebservice() As BackendService.BackendServiceSoapClient
'--Detect Current URL
Dim Url As String = String.Format("{0}BackendService.asmx", Settings.RootURLAll)
Dim Binding As ServiceModel.BasicHttpBinding
If Settings.RootURLAll.IndexOf("https") > -1 Then
Binding = New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.Transport) With {.MaxReceivedMessageSize = 5000 * 1024}
Else
Binding = New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.None) With {.MaxReceivedMessageSize = 5000 * 1024}
End If
'--Create new Webservice Client
Dim Binding As New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.Transport) With {.MaxReceivedMessageSize = 5000 * 1024}
Dim WS As New BackendService.BackendServiceSoapClient(Binding, New ServiceModel.EndpointAddress(Url))
Return WS
End Function
c2064139-ed45-4286-9fe1-e28306feee61|0|.0
Ich programmiere gerade ein Projekt in Silverlight 2, und immer wenn ich im Visual Studio per F5 die APplikation zum Debuggen starte, und dann wirklich mal ein Fehler im Code auftaucht, bekomme ich folgende Fehlermeldung: Produkt
Microsoft Visual Studio 2008
Problem
Funktioniert nicht mehr
Datum
28.01.2009 18:24
Status
Bericht gesendet
Problemsignatur
Problemereignisame: APPCRASH
Anwendungsname: devenv.exe
Anwendungsversion: 9.0.30729.1
Anwendungszeitstempel: 488f2b50
Fehlermodulname: StackHash_5104
Fehlermodulversion: 6.0.6001.18000
Fehlermodulzeitstempel: 4791a783
Ausnahmecode: c0000374
Ausnahmeoffset: 000aada3
Betriebsystemversion: 6.0.6001.2.1.0.256.1
Gebietsschema-ID: 1031
Zusatzinformation 1: 5104
Zusatzinformation 2: 491133e6875047042f39cbbc152c1a0e
Zusatzinformation 3: 6717
Zusatzinformation 4: a5982a4c4ba4763232c47f02134b8bd8
Die Lösung ist ganz einfach:
Im Visual Studio die Sprache auf Englisch setzen.
Da gibts wohl noch einige “Ungenauigkeiten”, wenn verschiedene Sprachversionen (insbesondere nicht-englisch) benutzt werden).
5a18e0e2-2523-44a4-88cd-3737c8eaa9f5|0|.0
Bei mir bringt der ASP.Net Development Server (der für die Entwicklung von Silverlight Anwendungen extrem praktisch ist) im Internet Explorer immer einen Fehler, dass die Seite nicht gefunden werden kann (URL: http://localhost:64720/Default.html). Die gleiche URL funktioniert jedoch im Firefox problemlos, und auch im IE funktioniert die URL, wenn man anstatt localhost die 127.0.0.1 benutzt.
Das Problem liegt ein einem Eintrag in der hosts Datei, der für IPV6 gilt, jedoch hört der DevServer nicht auf IPV6.
also: ab in die c:\Windows\System32\Drivers\etc\hosts und vor die "::1 localhost" eine "#".
Damit ist das Problem behoben :-)
Tipp: am einfachsten gehht das Ändern der hosts, wenn man die in einen anderen Ordner kopiert, ändert, und wieder zurückkopiert. Dann hat man nur einen UAC Dialog.
2b3c8a1b-fabd-4bc8-9047-294a4079702a|0|.0