The solution is to override the built-in UIAutomation locator functionality (used when testing WPF/Silverlight applications) and modify the locator on the fly. The following simple example will change the location of a checkbox in the sample application to be a different position:

function Test() {
    //Specify the customized locator behavior
    overrideLocators();

    SeS('CheckBox').DoClick();
}

g_load_libraries = ["UIAutomation"];


function overrideLocators() {
    UIAutomationLocator.fromLocationDef = UIAutomationLocator.fromLocation;

    UIAutomationLocator.fromLocation = function (objLocation, objInfo) {
        // Do something here if needed
        if (objInfo.location == 'tabControl1/tabItem1/checkBoxX') {
            objInfo.location = 'tabControl1/tabItem1/checkBox1';
        }

        // and/or call default locator
        return UIAutomationLocator.fromLocationDef(objLocation, objInfo);
    }
}